如何loggingpythonexception?
我如何在Python中loggingexception?
我看了一些选项,发现我可以使用这段代码访问实际的exception详细信息:
import sys import traceback try: 1/0 except: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_exception(exc_type, exc_value, exc_traceback)  我想以某种方式得到stringprint_exception()抛出到标准输出,以便我可以logging它。 
 要回答你的问题,你可以使用traceback.format_exception()函数得到print_exception()的string版本。 它将追踪消息作为string列表返回,而不是将其打印到标准输出,因此您可以使用它来执行所需的操作。 例如: 
 import sys import traceback try: asdf except NameError: exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) print ''.join('!! ' + line for line in lines) # Log it or whatever here 
这显示:
 !! Traceback (most recent call last): !! File "<stdin>", line 2, in <module> !! NameError: name 'asdf' is not defined 
但是,我肯定会推荐使用标准的Python日志logging模块,正如rlotun所build议的那样。 这不是最简单的设置,但它是非常可定制的。
 看看logging.exception ( Python日志模块 ) 
 import logging def foo(): try: some_code() except: logging.exception('') 
这应该会自动处理获取当前exception的追踪并正确logging。
loggingexception就像在任何日志消息中添加exc_info = True关键字参数一样简单,请参阅http://docs.python.org/2/library/logging.html中的; Logger.debug条目。
例:
 try: raise Exception('lala') except Exception: logging.info('blah', exc_info=True) 
输出(当然,取决于你的日志处理程序configuration):
 2012-11-29 10:18:12,778 - root - INFO - <ipython-input-27-5af852892344> : 3 - blah Traceback (most recent call last): File "<ipython-input-27-5af852892344>", line 1, in <module> try: raise Exception('lala') Exception: lala 
首先,考虑在你的except子句中使用适当的Exceptiontypes。 然后,命名exception,您可以打印它:
 try: 1/0 except Exception as e: print e 
取决于你的Python版本,你必须使用
 except Exception, e 
在Python 3.5中,您可以在exc_info参数中传递exception实例:
 import logging try: 1/0 except Exception as e: logging.error('Error at %s', 'division', exc_info=e)