异常捕获

捕获常规异常

try:
可能发生错误的代码
except:
如果出现异常执行的代码

捕获特定异常

如果尝试执行的代码的异常类型和要捕获异常类型不一致,则无法捕获异常。

try:
print(name)
except NameError as e:
print('name变量名称未定义错误')

捕获多个异常

当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。

try:
print(1/0)
except (NameError, ZeroDivisionError):
print('ZeroDivision错误...')

捕获异常并输出描述信息

try:
print(num)
except (NameError, ZeroDivisionError) as e:
print(e)

捕获所有异常

try:
print(name)
except Exception as e:
print(e)

异常else

else表示的时如果没有异常要执行的代码。

try:
print(1)
except Exception as e:
print(e)
else:
print('我是else,是没有异常的时候执行的代码')

异常的finally

finally表示的是无论是否异常都要执行的代码,例如关闭文件。

try:
f = open('test.txt', 'r')
except Exception as e:
f = open('test.txt', 'w')
else:
print('没有异常,真开心')
finally:
f.close()

异常的传递

  • 当所有函数都没有捕获异常的时候,程序就会报错。

  • 利用异常传递性的特点,当我们想要保证程序不会因为异常奔溃的时候,就可以在main函数这种设置异常捕捉,由于无论在整个程序哪里发生异常,最终都会传递到main函数中。