3.1 KiB
Chapter 10. Files and Exceptions
Files operation skipped here. Directly head to Exception
Exceptions
- exceptions = objects python use to manage errors that arise during a program's execution.
- When python unsure what to do, exception object is created.
- If exceptions are handled correctly, program can continue run
- If don't handle exception, program will halt and show traceback
Syntax of exception handling: try-except
try
tells python do sthexcept
tell python what to do if an exception is raised.
e.g. ZeroDivisionError Exception
- Simple error, python will create
ZeroDivisionError
in response to do "Divide by Zero". - When you think an error may occur, you can write a
try-except
block to handle exception
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
If more code followed try-except
block, the program would continue running. e.g. as shown below
Using Exceptions to Prevent Crashes
Handling errors correctly is important when the program has more work to do after the error occurs.
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
first_number = input("\nFirst number: ")
if first_number == 'q':
break
second_number = input("Second number: ")
if second_number == 'q':
break
answer = int(first_number) / int(second_number)
print(answer)
This function ask for numbers and will calculate division. To properly cover potential failure, use try-except-else
block
try
block: Python attempts to run codeexcept
block: catch possible errorelse
block: if division operation is successful, carry on!
Hence, program can be more robust
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by 0!")
else:
print(answer)
Handling FileNotFoundError Exception
filename = 'alice.txt'
with open(filename, encoding='utf-8') as f:
contents = f.read()
If python cannot find alice.txt
, it will raise halt, and show traceback
Traceback (most recent call last):
File "alice.py", line 6, in <module>
with open(filename, encoding='utf-8') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'alice.txt'
After changing python code to
filename = 'alice.txt'
try:
with open(filename, encoding='utf-8') as f:
contents = f.read()
except FileNotFoundError:
print(f"Sorry, the file {filename} does not exist")
Python will show "Sorry, the file alice.txt does not exist"
Failing Silently
If you want the program to fail silently and carry on, use pass
to tell Python to do nothing, and skip the try-except-else blocks
def count_words(filename):
"""Count the approximate number of words in a file."""
try:
--snip--
except FileNotFoundError:
pass
else:
--snip--
filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
count_words(filename)
Storing Data
json.dump()
& json.load