python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让python不知所措的错误时,他都会创建一个异常对象。如果你编写了处理异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
异常是使用try-except代码块处理的。try-except代码块让python执行指定的操作,同时告诉python发生异常时该怎么办。使用try-except代码块时,即使发生异常,程序也可以继续运行:显示你编好的友好的错误信息,而不是令用户迷惑的traceback。
一、处理ZeroDivisionError异常
division.py
print(5/0)
traceback:
- 使用try-except代码块
处理ZeroDivisionError异常的try-except代码块类似下面:
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
2.使用异常避免崩溃
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("\nSecond number:")
if second_number == 'q':
break
answer = int(first_number) / int(second_number)
print(answer)
让用户看到traceback也不是一个好主意,不懂技术的用户会被搞糊涂,而且如果用户怀有恶意,他会知道程序名称还将看到部分不能正确运行的代码。
3.else代码块
依赖于try代码块成功运行的代码都应该放到else代码块中:
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("\nSecond number:")
if second_number == 'q':
break
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by 0")
else:
print(answer)
二、处理FileNotFoundError异常
使用文件时,一种常见的问题是找不到文件:你要查找的文件可能在其他地方、文件名可能不正确或者这个文件根本不存在。对于这些情形,都可使用try-except代码块以直观的方式进行处理。
我们来尝试读取一个不存在的文件。
filename = 'alice.txt'
with open(filename) as f_obj:
contents = f_obj.read()
引发的异常如下:
在这个示例中,错误是由函数open()导致的,因此要处理这个错误,必须将try语句放在包含Open()的代码行前
filename = 'alice.txt'
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg = 'Sorry , the file ' + filename + ' does not exist'
print(msg)
在这个实示例中,try代码块引发文件异常,因此python找出与该错误匹配的except代码块,并运行其中的代码块,最终显示一条友好的错误提示,而不是返回traceback