我试过搜索,但找不到任何东西。不过我可能只是没说对了。在我正在阅读的书中。 Dave Kuhlman撰写的Python书籍他编写了一个try:except语句来捕获IOError。
def test():
infilename = 'nothing.txt'
try:
infile = open(infilename, 'r')
for line in infile:
print line
except IOError, exp:
print 'cannot open file "%s"' % infilename
我的问题是IOError后的exp是什么。它做了什么,为什么会那样?
答案 0 :(得分:4)
它为except
块中的异常提供了一个变量名称:
>>> try:
... raise Exception('foo')
... except Exception, ex:
... print ex
... print type(ex)
...
foo
<type 'exceptions.Exception'>
我个人觉得as
语法更清晰:
>>> try:
... raise Exception('foo')
... except Exception as ex:
... print ex
... print type(ex)
...
foo
<type 'exceptions.Exception'>
但根据this question中的答案,as语法直到2.6才被引入。
答案 1 :(得分:1)
exp
是将异常对象分配给的变量。引发异常时,Python会创建一个异常对象,其中包含有关错误的更多信息,包括堆栈跟踪并且通常包含错误消息。此代码实际上并不使用exp
,因此将其删除会更清晰。
答案 2 :(得分:1)
except: IOError, exp:
应该是这样的:
except IOError, exp:
exp存储错误消息,因此exp的值为:没有这样的文件或目录:XXX
您可以将其重命名为其他任何内容
答案 3 :(得分:0)
它包含错误消息,堆栈跟踪和有关错误的其他信息。虽然该特定代码摘录实际上并未使用该信息,但它在生产环境中是相关的,其中错误记录对于调试很重要。