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

使用日志记录模块的优点是您可以访问所有花哨的日志处理程序(系统日志、电子邮件、旋转文件日志),如果您希望将异常记录到多个目的地,这很方便。

【讨论】:

如果不使用systraceback,为什么还要导入它们?【参考方案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语句

python 中 try ...except

try与except处理异常语句

如何让 Try except 输出更多细节?显示它到底发生在哪里? - Python [重复]

python中常见错误及try-except 的用法

python try except 出现异常时,except 中如何返回异常的信息字符串