错误处理机制
异常捕获
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) * 2
def main():
bar('0')
main()
运行程序结果如下,根据错误调用链,最终错误在line3
Traceback (most recent call last):
File "err.py", line 11, in <module>
main()
File "err.py", line 9, in main
bar('0')
File "err.py", line 6, in bar
return foo(s) * 2
File "err.py", line 3, in foo
return 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 不带参数时可抛出原样异常,会层级向上追溯错误
```python
try:
1/0
except Exception as e:
raise
# ZeroDivisionError: integer division or modulo by zero
- 自定义错误信息
```powershell
raise Exception(“test”)
Traceback (most recent call last):
File “
- 自定义错误类