來源:https://www.loggly.com/blog/exceptional-logging-of-exceptions-in-python/
該電子報提到四種 try-except 的模式:
# The "Big Tarp" Pattern
try:
main_loop()
except Exception: #####
logger.exception("Fatal error in main loop")所有例外全部捕捉。
# The “Pinpoint” Pattern
try:
places = do_something()
except AnException as err: #####
places = list()只捕捉特定例外。
# The “Transformer” Pattern
try:
something()
except SomeError as err:
raise DifferentError() from err ##### py3 only通常用於 SomeError 為第三方套件例外,DifferentError 為自定義例外時。
# The “Message and Raise” Pattern
try:
something()
except SomeError:
logger.warn("...")
raise #####也就是 re-raise。
配合 logging 模組使用時,.warn() 等方法可以設定 exc_info=True 讓紀錄包含 Traceback。