Python try/except:显示变量后显示错误原因

Nea*_*ers 29 python exception-handling

我甚至不确定要搜索哪些正确的单词.我想在一个except块中显示错误对象的一部分(类似于VBScript中的错误对象,它有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 ..." 
Run Code Online (Sandbox Code Playgroud)

Cor*_*erg 55

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

  • 它给出了原因,这是你原来的问题所要求的. (7认同)
  • 不给出堆栈跟踪或行数错误. (3认同)

sah*_*hhm 25

如果您预计会出现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"
Run Code Online (Sandbox Code Playgroud)

您可以通过调用手动获取行号和其他信息 traceback.print_exc()


Ign*_*ams 10

异常对象的字符串值将为您提供原因.该traceback模块将允许您访问完整的回溯.


Sen*_*ran 6

换句话说,

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

您可以在 Ignacio 在他的回复中链接的手册页中获取详细信息。


Cad*_*nge 6

更好的方法是使用标准的Python Logging模块.

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))
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

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
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你不使用`sys`和`traceback`,为什么还要导入它们呢? (2认同)