显示错误消息的正确方法

时间:2017-09-21 16:15:30

标签: python exception logging

根据Python's Logging tutoriallogging.error将用于报告错误的抑制而不会引发异常。",如果我想报告错误,我会#" 39;我应该只是提出一个例外而根本不使用logging

如果我想报告错误然后引发异常怎么办?

例如:

try:                                                                        
    os.path.getsize('/nonexistent')                                         
except os.error as error:                                                   
    logging.error(str(error))                                               
    logging.error('something went wrong')                                   
    raise SystemExit(1)                                                     

这导致以下行被打印到标准错误:

ERROR:root:[Errno 2] No such file or directory: '/nonexistent'
ERROR:root:something went wrong

这似乎是明智的。或者:

try:                                                                        
    os.path.getsize('/nonexistent')                                         
except os.error as error:                                                   
    logging.error(str(error))                                               
    raise SomeUserDefinedException('something went wrong')

这是不好的做法吗?

2 个答案:

答案 0 :(得分:1)

  • logging用于举报。
  • raise是一个中断程序正常流程的动作。

通常情况下,raise例外,如果有实际的中断流,并且您希望报告,则可以使用logging,默认情况下会记录错误和异常。

logging部分通常作为程序中模块,类或中间件的包装。

代码中的

logging只能用于 DEBUG 目的,或者用于 INFO 目的,如果您想跟踪服务器日志中的某些信息例如。不适用于错误

答案 1 :(得分:1)

我不相信这是一种不好的做法。异常和日志记录有两个不同的用途,在任何给定的情况下,您可能需要一个,另一个或两者。例外情况是代码中的程序化消费和控制流,而日志记录则是由人或某种自动日志监视器(例如Splunk)进行外部消费。例如,您可以记录某些变量的值,以帮助您找出发生的情况并改进代码,但在这种情况下,调试级别更合适。或者您可能希望系统管理员了解该问题并可能采取一些措施。在这种情况下,将日志级别设置为错误并使用类似syslog日志处理程序的操作是有意义的。