Python —— 异常处理
Python —— 错误处理
python中支持四种异常处理。
- 默认的异常处理器
- try...except...finally...
- assert
- with...as...
默认的异常处理器
s = 'hello world' print(s[50]) print(s)
Traceback (most recent call last):
File "D:/python异常处理.py", line 2, in <module>
print(s[50])
IndexError: string index out of range
如果没有对错误进行任何预防,在程序执行过程中发生异常,会中断程序,调用python默认的异常处理器,并在终端输出异常信息。
这种情况下,第三行代码不会执行。
try...except...finally
s = 'hello world' try: print(s[50]) except Exception: print("index error...") finally: print("finally...")
''' index error... finally... '''
except xxxx:当try中执行出现错误,如果except中捕获该种错误,则执行except中的内容。否则仍然以默认异常处理器进行处理。
finally xxxx:无论 try 中有无报错,finally中的代码始终执行。
assert
assert False, 'error...' print("continue...") ''' Traceback (most recent call last): File "D:/python异常处理.py", line 16, in <module> assert False, 'error...' AssertionError: error... '''
assert True, 'error...' print("continue...") ''' continue... '''
先判断assert后边紧跟的语句是True还是False。
如果是True:继续执行后边代码。
如果是False:中断程序,调用默认的异常处理器,同时输出assert语句逗号后边的提示信息。
with...as...
with open('s1.py', 'r', encoding='utf-8') as f: f.read() print(2 / 0) print("文件操作完成") ''' Traceback (most recent call last): File "D:/python异常处理.py", line 22, in <module> print(2/0) ZeroDivisionError: division by zero '''
在文件操作中,使用完毕要调用close方法关闭。
with...as...提供一个很方便的替代方法:open打开文件后将返回的文件流对象赋值给f文件句柄,在with语句块中使用。with语句块执行完后会隐藏的自动关闭文件。
如果with语句或语句块中发生异常,会调用默认的异常处理器,但文件还是会正常关闭。