來源: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。