异常&异常处理
异常!=错误
在程序运行过程中,总会遇到各种各样的错误
。
有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。
有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理。
还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然断掉了。这类错误也称为异常
,在程序中通常是必须处理的,否则,程序会因为各种问题终止并退出。
常见异常
10 / 0
# ZeroDivisionError: division by zero
['1', 2, True][3]
# IndexError: list index out of range
...
异常处理
当我们认为某些代码可能会出错时,就可以用try
来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except
语句块,执行完except
后,如果有finally
语句块,则执行finally
语句块,至此,执行完毕。
year = int(input("请输入年份 :"))
# 当用户输入非数值型数据,会产生ValueError
# ValueError: invalid literal for int() with base 10: 'abc'
为了交互的友好,可以在用户输入错误类型时做异常处理,让用户重新输入,而不是直接退出程序。
try:
year = int(input("请输入年份 :"))
except ValueError:
year = int(input("请输入数字类型的数据 :"))
异常抛出
在程序分支走到发生错误的部分,可以自已抛出异常进行处理。
try:
year = int(input("请输入年份"))
if year < 0:
raise ValueError("请输入正确年份")
except Exception as e:
print(e)