exception消息(Python 2.6)

在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' 

我怎么可能在catch Exception中打印下面这行?

 File "C:\Python_tests\Exception_Handling\src\exception_handling.py", line 11, in <module> pkl_file = open('monitor.dat', 'rb') 

所以程序不会退出。

这将打印exception消息:

 except Exception, e: print "Couldn't do it: %s" % e 

这将显示整个回溯:

 import traceback # ... except Exception, e: traceback.print_exc() 

但是你可能不想抓到exception。 一般来说,越窄越好。 所以你可能想试试:

 except IOError, e: 

代替。 关于缩小你的exception处理的问题,如果你只关心丢失的文件,那么把try-except仅仅放在open:

 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() 

如果你想捕获exception传递的exception对象,最好开始使用Python 2.6中引入的NEW格式(目前支持这两种格式),因为这是Python 3的唯一方式。

那就是:

 try: ... except IOError as e: ... 

例:

 try: pkfile = open('monitor.dat', 'rb') except IOError as e: print 'Exception error is: %s' % e 

有关详细的概述,请参阅Python 2.6文档的新增内容 。

Python有追溯模块。

 import traceback try: pkl_file = open('monitor.dat', 'rb') monitoring_pickle = pickle.load(pkl_file) pkl_file.close() except IOError: traceback.print_exc() 

感谢所有。

这就是我需要的:)

 import traceback try: # boom except Exception: print traceback.format_exc()