python异常处理

Ric*_*ich 7 python

我正在开发一个Django站点,并且一直在努力找出处理异常处理的最佳方法.我一直在做

try:
    Some code
except:
    log error in my own words, i.e 'Some code' failed to execute
    Some other code
Run Code Online (Sandbox Code Playgroud)

这可以捕获所有异常,从而确保我的网站不会传递500个错误等.但是,由于我的知识有限,我正在失去实际的异常,这使得调试变得非常痛苦.如何打印出现的错误?目前我注释掉了try:catch:并查看错误并修复它.肯定有更好的办法!

提前致谢

丰富

Len*_*bro 18

您在异常变量中捕获异常:

try:
    # some code
except Exception, e:
    # Log the exception.
Run Code Online (Sandbox Code Playgroud)

有各种格式化异常的方法,日志模块(我假设您/ Django使用它)支持格式化异常,并且异常本身通常在呈现给字符串时呈现有用的消息.

这是一个例子:

import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug('This message should go to the log file')

try:    
    1/0
except Exception as e:
    logging.exception(e)
Run Code Online (Sandbox Code Playgroud)

此示例使用新的"as"语法来捕获异常,Python 2.6及更高版本支持该异常.以上的输出是:

DEBUG:root:This message should go to the log file
ERROR:root:integer division or modulo by zero
Traceback (most recent call last):
  File "untitled-1.py", line 6, in <module>
    1/0
ZeroDivisionError: integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)


mik*_*iku 5

#!/usr/bin/env python

import sys

try:
    0 / 0
except Exception, e:
    print >> sys.stderr, 'Hello %s' % e
    # Hello integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)

请注意,您可以为一个块捕获多个异常,例如:

try:
    open(filename)
except NameError, e:
    print >> sys.stderr, e
except IOError, ioe:
    print >> sys.stderr, ioe
Run Code Online (Sandbox Code Playgroud)

可以在本教程中找到有关异常处理的更多信息:


Mih*_*der 1

尝试这个:

try:
  # some code
except Exception, e:
  # log error with data from e
Run Code Online (Sandbox Code Playgroud)