try
try:
print('try...')
r = 10 / 0
print('result:', r)
except ZeroDivisionError as e:
print('except:', e)
finally:
print('finally...')
print('END')
当我们认为某些代码可能会出错时,就可以用try
来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except
语句块,执行完except
后,如果有finally
语句块,则执行finally
语句块,至此,执行完毕。
try: print('try...') r = 10 / int('a') print('result:', r) except ValueError as e: #用一个except
捕获ValueError
print('ValueError:', e) except ZeroDivisionError as e: #另一个except
捕获ZeroDivisionError
。 print('ZeroDivisionError:', e) finally: print('finally...') print('END')
int()函数可能会抛出ValueError
,所以我们用一个except
捕获ValueError
,用另一个except
捕获ZeroDivisionError
。
Python的错误其实也是class,所有的错误类型都继承自BaseException
,所以在使用except
时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。比如:
try: foo() except ValueError as e: print('ValueError') except UnicodeError as e: print('UnicodeError')
第二个except
永远也捕获不到UnicodeError
,因为UnicodeError
是ValueError
的子类,如果有,也被第一个except
给捕获了。
常见的错误类型和继承关系:
BaseException
+-- SystemExit #系统结束
+-- KeyboardInterrupt #键盘中断 ctrl+D
+-- GeneratorExit #主动结束
+-- Exception #异常
+-- StopIteration #迭代器错误
+-- StandardError #标准错误
| +-- BufferError #buff错误
| +-- ArithmeticError #数学错误
| | +-- FloatingPointError #浮点数错误
| | +-- OverflowError #溢出
| | +-- ZeroDivisionError #除零
| +-- AssertionError #断言错误
| +-- AttributeError #属性错误
| +-- EnvironmentError #环境错误
| | +-- IOError #IO错误
| | +-- OSError #操作系统错误
| | +-- WindowsError (Windows) #windows错误
| | +-- VMSError (VMS) #vms错误
| +-- EOFError #文件结束符eof错误
| +-- ImportError #导入错误
| +-- LookupError #查找错误
| | +-- IndexError #下标错误
| | +-- KeyError #key值错误
| +-- MemoryError #内存错误
| +-- NameError #命名错误
| | +-- UnboundLocalError #无边界位置错误
| +-- ReferenceError #引用错误
| +-- RuntimeError #运行时错误
| | +-- NotImplementedError #未实现错误
| +-- SyntaxError #语法错误
| | +-- IndentationError #标识符错误
| | +-- TabError #tab错误
| +-- SystemError #系统错误
| +-- TypeError #类型错误
| +-- ValueError #值错误
| +-- UnicodeError #unicode错误
| +-- UnicodeDecodeError #unicode解码错误
| +-- UnicodeEncodeError #unicode编码错误
| +-- UnicodeTranslateError #unicode翻译错误
+-- Warning #警告
+-- DeprecationWarning #弃用警告
+-- PendingDeprecationWarning #即将弃用的警告
+-- RuntimeWarning #运行时警告
+-- SyntaxWarning #语法警告
+-- UserWarning #用户警告
+-- FutureWarning #功能警告
+-- ImportWarning #导入警告
+-- UnicodeWarning #unicode警告
+-- BytesWarning #字节警告