在Python中,如果我打开一个不存在的二进制文件,程序将退出并显示错误并打印:
Traceback (most recent call last):
File "C:\Python_tests\Exception_Handling\src\exception_handling.py",
line 4, in <module>
pkl_file = open('monitor.dat', 'rb')
IOError: [Errno 2] No such file or directory: 'monitor.dat'
我可以用'try-except'处理这个问题,例如:
try:
pkl_file = open('monitor.dat', 'rb')
monitoring_pickle = pickle.load(pkl_file)
pkl_file.close()
except Exception:
print 'No such file or directory'
我怎样才能在捕获的Exception中打印以下行?
File "C:\Python_tests\Exception_Handling\src\exception_handling.py",
line 11, in <module>
pkl_file = open('monitor.dat', 'rb')
所以程序不会退出。
答案 0 :(得分:90)
这将打印异常消息:
except Exception, e:
print "Couldn't do it: %s" % e
这将显示整个追溯:
import traceback
# ...
except Exception, e:
traceback.print_exc()
但你可能不想捕捉异常。一般来说,你可以越穷越好。所以你可能想尝试:
except IOError, e:
代替。另外,关于缩小异常处理的问题,如果你只关心丢失的文件,那么将try-except只放在打开的位置:
try:
pkl_file = open('monitor.dat', 'rb')
except IOError, e:
print 'No such file or directory: %s' % e
monitoring_pickle = pickle.load(pkl_file)
pkl_file.close()
答案 1 :(得分:22)
如果你想捕获Exception传递的异常对象,最好开始使用Python 2.6中引入的新格式(目前支持这两种格式),因为它将是进入Python 3的唯一方法。
那就是:
try:
...
except IOError as e:
...
示例:
try:
pkfile = open('monitor.dat', 'rb')
except IOError as e:
print 'Exception error is: %s' % e
答案 2 :(得分:9)
Python有traceback模块。
import traceback
try:
pkl_file = open('monitor.dat', 'rb')
monitoring_pickle = pickle.load(pkl_file)
pkl_file.close()
except IOError:
traceback.print_exc()
答案 3 :(得分:6)
谢谢大家。
那就是我需要的东西:)
import traceback
try:
# boom
except Exception:
print traceback.format_exc()