异常消息(Python 2.6)

tur*_*upi 35 python message exception-handling

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

我可以通过'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'
Run Code Online (Sandbox Code Playgroud)

我怎么能在捕获的Exception中打印以下行?

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

所以程序不会退出.

Ned*_*der 90

这将打印异常消息:

except Exception, e:
    print "Couldn't do it: %s" % e
Run Code Online (Sandbox Code Playgroud)

这将显示整个追溯:

import traceback

# ...

except Exception, e:
    traceback.print_exc()
Run Code Online (Sandbox Code Playgroud)

但你可能不想捕捉异常.一般来说,你可以越穷越好.所以你可能想尝试:

except IOError, e:
Run Code Online (Sandbox Code Playgroud)

代替.关于缩小异常处理的问题,如果你只关心丢失的文件,那么只将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()
Run Code Online (Sandbox Code Playgroud)


jat*_*ism 22

如果你想捕获Exception传递的异常对象,最好开始使用Python 2.6中引入的新格式(目前支持这两种格式),因为它将是进入Python 3的唯一方法.

那就是:

try:
    ...
except IOError as e:
    ...
Run Code Online (Sandbox Code Playgroud)

例:

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

详细的概述可以在Python 2.6中的新功能文档中找到.

  • 有帮助,但这没有回答这个问题.也许更好的评论? (2认同)

Joc*_*zel 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()
Run Code Online (Sandbox Code Playgroud)


tur*_*upi 6

谢谢大家.

那就是我需要的:)

import traceback

try:
    # boom
except Exception:
    print traceback.format_exc()
Run Code Online (Sandbox Code Playgroud)

  • 您在发表评论时不应该创建答案.接受其中一个答案来奖励你的助手! (8认同)