我想在我的代碼如下功能異常:logging.raiseExceptions = true不會再提高
- 記錄信息和錯誤信息,也例外控制檯和/或文件,而無需中斷程序流(即吞嚥異常,某種運行模式)
- 獲取到發展模式,其中異常升高,通過設置
develop = True
標誌
目前,我使用Python3 logging
模塊,該模塊(根據this)應該具有完全內置的功能。該標誌是logging.raiseExceptions = True
。
但是,我沒有得到這個工作在MWE:我投擲的異常不會重新提出,無論我的國旗設置。
# mwe.py
import logging
import logging.config
if __name__ == '__main__':
# Configure logging and set flag to raise exceptions
logging.config.fileConfig('log.conf')
logging.raiseExceptions = True
logger = logging.getLogger('root')
logger.info('Started')
# Test whether exceptions get raised
try:
raise RuntimeError("Ooops.")
except RuntimeError:
try:
logger.exception('There was an oops.')
# which is the same as logger.error('...', exc_info=True)
except:
print("GOTCHA! Exception was re-raised.")
logger.info('Finished')
相應配置文件:
# log.conf
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=consoleFormatter
[logger_root]
handlers=consoleHandler
level=DEBUG
[handler_consoleHandler]
class=logging.StreamHandler
formatter=consoleFormatter
args=(sys.stdout,)
[formatter_consoleFormatter]
format=%(filename)s (%(lineno)d) %(levelname)-8s - %(message)s
這將產生以下輸出:
mwe.py (12) INFO - Started
mwe.py (19) ERROR - There was an oops.
Traceback (most recent call last):
File "mwe.py", line 16, in <module>
raise RuntimeError("Ooops.")
RuntimeError: Ooops.
mwe.py (24) INFO - Finished
爲什麼我沒有得到的GOTCHA
一部分,雖然Ť他的默認值raiseExceptions
是True
另外我也將它設置爲True
?我的配置有什麼問題?
或者我對使用logging
達到這個目的有一些很大的誤解?
(小獎金的問題:是否有配置在log.conf
文件raiseException
標誌的方式?)
啊,我明白了。感謝您的澄清!對於自定義異常,如果我希望程序在引發時不會停止(例如,由於輸入數據不正確),那麼對於自定義異常,最佳做法是什麼?我不應該首先提出任何自定義異常,只是記錄錯誤;或者我應該提高自定義異常,然後自動處理它們(例如通過'sys.excepthook')......我在這裏有點困惑。 :/ – blsqr
只要使用'try ... except',但不要在塊內重新提升它。有自定義例外是好的。 – ElmoVanKielmo