Python try/except:显示我的变量后显示错误原因
Posted
技术标签:
【中文标题】Python try/except:显示我的变量后显示错误原因【英文标题】:Python try/except: Showing the cause of the error after displaying my variables 【发布时间】:2010-12-30 05:43:26 【问题描述】:我什至不确定要搜索什么合适的词。我想在 except 块中显示部分错误对象(类似于 VBScript 中的 err 对象,它具有 Err.Number 和 Err.Description)。例如,我想显示我的变量的值,然后显示确切的错误。显然,我在下面导致了一个被零除的错误,但是我怎样才能打印出这个事实呢?
try:
x = 0
y = 1
z = y / x
z = z + 1
print "z=%d" % (z)
except:
print "Values at Exception: x=%d y=%d " % (x,y)
print "The error was on line ..."
print "The reason for the error was ..."
【问题讨论】:
【参考方案1】:try:
1 / 0
except Exception as e:
print(e)
【讨论】:
它给出了原因,这就是您最初的问题所要求的。 Python 3 语法:将print e
替换为 print (e)
【参考方案2】:
如果您预计会出现 DivideByZero 错误,您可以捕获该特定错误
import traceback
try:
x = 5
y = 0
print x/y
except ZeroDivisionError:
print "Error Dividing %d/%d" % (x,y)
traceback.print_exc()
except:
print "A non-ZeroDivisionError occurred"
可以通过调用traceback.print_exc()
手动获取行号等信息
【讨论】:
谢谢。我真的在寻找“回溯”——不记得它叫什么了,因为我在寻找错误或异常对象。 The DivideByZero 只是我的帖子中使用的一个简单错误,我的实际情况要复杂得多。【参考方案3】:the exception object 的字符串值会告诉你原因。 traceback
模块将允许您访问完整的回溯。
【讨论】:
【参考方案4】:更好的方法是使用标准Python Logging module。
import sys, traceback, logging
logging.basicConfig(level=logging.ERROR)
try:
x = 0
y = 1
z = y / x
z = z + 1
print "z=%d" % (z)
except:
logging.exception("Values at Exception: x=%d y=%d " % (x,y))
这会产生以下输出:
ERROR:root:Values at Exception: x=0 y=1
Traceback (most recent call last):
File "py_exceptions.py", line 8, in <module>
z = y / x
ZeroDivisionError: integer division or modulo by zero
使用日志记录模块的优点是您可以访问所有花哨的日志处理程序(系统日志、电子邮件、旋转文件日志),如果您希望将异常记录到多个目的地,这很方便。
【讨论】:
如果不使用sys
和traceback
,为什么还要导入它们?【参考方案5】:
换句话说,
try:
1/0
except Exception as e:
print e
您可以在 Ignacio 在他的回复中链接的手册页中获取详细信息。
【讨论】:
【参考方案6】:如果你这样做
except AssertionError as error:
print(error)
那么这应该会使您的程序与跟踪和一切崩溃,就好像 try/except 不存在一样。但无需更改缩进和注释行。
【讨论】:
【参考方案7】:一般避免在异常后手动打印变量。如果这被告知每个开发人员,将会节省很多时间。只是不要做可以自动化的工作。
改用工具来升级您的错误消息。一劳永逸。
只需一个pip install
,您就会得到这个(图片取自其中一种工具):
无需在代码中插入大量打印和格式。
看看traceback-with-variables、tbvaccine、pretty-errors、better-exception和其他pypi工具。
【讨论】:
以上是关于Python try/except:显示我的变量后显示错误原因的主要内容,如果未能解决你的问题,请参考以下文章
python中的try/except/else/finally语句