Python 内置了一套 try..except...finally的错误处理机制
Python内置的try...except...finally
用来处理错误十分方便。出错时,会分析错误信息并定位错误发生的代码位置才是最关键的。
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: # 无论有没有 错误 流程体结束都会执行 finally print(‘finally...‘) print(‘END‘)
如果不知道将会发生什么错误 但是还要保证这段代码正常运行 可以使用
def foo(s): return 10 / int(s) def bar(s): return foo(s) * 2 def main(): try: bar(‘0‘) except Exception as e: #Exception可以允许你不事先指定错误原因 只要检测到 异常 就会执行 print(‘Error:‘, e) finally: print(‘finally...‘)
#Python内置的logging 模块
#可以记录下来错误 通过配置,logging
还可以把错误记录到日志文件里,方便事后排查 import logging def foo(s): return 10 / int(s) def bar(s): return foo(s) * 2 def main(): try: bar(‘0‘) except Exception as e: logging.exception(e) main() print(‘END‘)
也可人为抛出异常
class FooError(ValueError): pass a= 1 if a != 0: raise FooError(‘invalid value: %s‘ % s) else: print(‘ok‘) ----------------------------------- Traceback (most recent call last): File "C:/Users/hxsd/PycharmProjects/helloWorld/类的__slots__.py", line 47, in <module> raise FooError(‘invalid FooError‘) #自定义抛出的错误信息 __main__.FooError: invalid FooError