Python內置的處理異常機制與調試
阿新 • • 發佈:2018-02-01
異常 hello 程序 finall exception 沒有 運行 style .py
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 defmain(): 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
調試時可以使用斷點調試的方式
Python內置的處理異常機制與調試