错误处理机制

异常捕获

try、except、else、finally
错误、调试与测试 - 图1

  1. try:
  2. print('try...')
  3. r = 10 / int('2')
  4. print('result:', r)
  5. except ValueError as e:
  6. print('ValueError:', e)
  7. except ZeroDivisionError as e:
  8. print('ZeroDivisionError:', e)
  9. else:
  10. print('no error!')
  11. finally:
  12. print('finally...')
  13. print('END')
  14. # try... no error finally end

调用栈

  1. # err.py:
  2. def foo(s):
  3. return 10 / int(s)
  4. def bar(s):
  5. return foo(s) * 2
  6. def main():
  7. bar('0')
  8. main()

运行程序结果如下,根据错误调用链,最终错误在line3

  1. Traceback (most recent call last):
  2. File "err.py", line 11, in <module>
  3. main()
  4. File "err.py", line 9, in main
  5. bar('0')
  6. File "err.py", line 6, in bar
  7. return foo(s) * 2
  8. File "err.py", line 3, in foo
  9. return 10 / int(s)
  10. 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

  1. - 抛出原样信息
  2. raise 不带参数时可抛出原样异常,会层级向上追溯错误
  3. ```python
  4. try:
  5. 1/0
  6. except Exception as e:
  7. raise
  8. # ZeroDivisionError: integer division or modulo by zero
  • 自定义错误信息 ```powershell

    raise Exception(“test”)

Traceback (most recent call last): File ““, line 1, in Exception: test ```

  • 自定义错误类