错误处理机制
异常捕获
try、except、else、finally
try:print('try...')r = 10 / int('2')print('result:', r)except ValueError as e:print('ValueError:', e)except ZeroDivisionError as e:print('ZeroDivisionError:', e)else:print('no error!')finally:print('finally...')print('END')# try... no error finally end
调用栈
# err.py:def foo(s):return 10 / int(s)def bar(s):return foo(s) * 2def main():bar('0')main()
运行程序结果如下,根据错误调用链,最终错误在line3
Traceback (most recent call last):File "err.py", line 11, in <module>main()File "err.py", line 9, in mainbar('0')File "err.py", line 6, in barreturn foo(s) * 2File "err.py", line 3, in fooreturn 10 / int(s)ZeroDivisionError: division by zero
异常抛出
标准异常 | 异常名称 | 描述 | | —- | —- | | BaseException | 所有异常的基类 | | Exception | 继承于BaseException,常规错误的基类 | | StandardError | 继承于Exception,所有的内建标准异常的基类 |
抛出标准异常 ```python try: 1/0 except Exception as e: raise e
ZeroDivisionError: integer division or modulo by zero
- 抛出原样信息raise 不带参数时可抛出原样异常,会层级向上追溯错误```pythontry:1/0except Exception as e:raise# ZeroDivisionError: integer division or modulo by zero
- 自定义错误信息
```powershell
raise Exception(“test”)
Traceback (most recent call last):
File “
- 自定义错误类
