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)
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()
换句话说,
try:
1/0
except Exception as e:
print e
Run Code Online (Sandbox Code Playgroud)
您可以在 Ignacio 在他的回复中链接的手册页中获取详细信息。
更好的方法是使用标准的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,电子邮件,旋转文件日志),如果您希望将异常记录到多个目标,这将非常方便.
| 归档时间: |
|
| 查看次数: |
52040 次 |
| 最近记录: |