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