Python:Try/Except的问题
我有一些代码可以打开并搜索一个装满PDF的文件夹。我正在使用pdfminer进行pdf转换。但是,我的一些PDF文件不可读。我希望我的代码能够处理转换工作的PDF文件,并有效地跳过转换失败的PDF文件 我正在尝试使用try/except功能,但它似乎不起作用。对于失败的PDF,例外情况有效。但是,对于转换工作的PDF,将同时执行try和exception块 这是我的密码:Python:Try/Except的问题,python,try-except,Python,Try Except,我有一些代码可以打开并搜索一个装满PDF的文件夹。我正在使用pdfminer进行pdf转换。但是,我的一些PDF文件不可读。我希望我的代码能够处理转换工作的PDF文件,并有效地跳过转换失败的PDF文件 我正在尝试使用try/except功能,但它似乎不起作用。对于失败的PDF,例外情况有效。但是,对于转换工作的PDF,将同时执行try和exception块 这是我的密码: fileNum = 0 d = shelve.open('PyDocSearch.db') for file in file
fileNum = 0
d = shelve.open('PyDocSearch.db')
for file in fileList:
fileNum += 1
z = []
try:
doc = convert_pdf(filePath + '/' + file)
print 'Success:',file
docWords = doc.split()
x = Counter(docWords)
y = x.most_common()
for i,j in enumerate(y):
if j[0] not in commonWords:
z.append(j)
d[file] = z
except:
doc = 'fail'
print 'Fail:',file
d[file] = doc
d.close()
当pdf转换工作时,为什么同时执行两个块?我怎样才能防止这种情况发生?谢谢 你可以做的一件事是你可以使用
try的else
子句。。。除非…
仅在未引发异常时执行代码:
fileNum = 0
d = shelve.open('PyDocSearch.db')
for file in fileList:
fileNum += 1
z = []
try:
doc = convert_pdf(filePath + '/' + file)
except:
doc = 'fail'
print 'Fail:',file
d[file] = doc
else:
print 'Success:',file
docWords = doc.split()
x = Counter(docWords)
y = x.most_common()
for i,j in enumerate(y):
if j[0] not in commonWords:
z.append(j)
d[file] = z
d.close()
只有当try
块中的代码完成且未引发异常时,才会执行else
块中的代码。如果在else
块中引发异常,则except
子句不会处理该异常
正如其他人所说,单独使用除之外的是不好的做法。您遇到的异常很可能是想告诉您一些关于程序出错原因的有用信息,但通过使用“裸”except
,您就是在用手指捂住耳朵,对Python帮助您的尝试说“拉拉听不见”
通常,最好只处理您期望的异常。如果您知道您的PDF库在出现问题时会引发SomePDFException
,那么最好编写
except SomePDFException as e:
而不是
except:
但是,如果您不知道类型,则可以捕获most1异常,如下所示:
except Exception as e:
print "Got exception of type %s:" % type(e)
print e
然后,这将告诉您引发的异常类型和消息
1有一些异常不是从异常继承的,即系统退出
,键盘中断
和生成退出
(文档:,)。如果您得到其中一个,我会感到惊讶,我希望您使用的PDF库遵循Python指南,从Exception
而不是BaseException
派生其异常,您可以做的一件事是使用try的else
子句。。。除非…
仅在未引发异常时执行代码:
fileNum = 0
d = shelve.open('PyDocSearch.db')
for file in fileList:
fileNum += 1
z = []
try:
doc = convert_pdf(filePath + '/' + file)
except:
doc = 'fail'
print 'Fail:',file
d[file] = doc
else:
print 'Success:',file
docWords = doc.split()
x = Counter(docWords)
y = x.most_common()
for i,j in enumerate(y):
if j[0] not in commonWords:
z.append(j)
d[file] = z
d.close()
只有当try
块中的代码完成且未引发异常时,才会执行else
块中的代码。如果在else
块中引发异常,则except
子句不会处理该异常
正如其他人所说,单独使用除
之外的是不好的做法。您遇到的异常很可能是想告诉您一些关于程序出错原因的有用信息,但通过使用“裸”except
,您就是在用手指捂住耳朵,对Python帮助您的尝试说“拉拉听不见”
通常,最好只处理您期望的异常。如果您知道您的PDF库在出现问题时会引发SomePDFException
,那么最好编写
except SomePDFException as e:
而不是
except:
但是,如果您不知道类型,则可以捕获most1异常,如下所示:
except Exception as e:
print "Got exception of type %s:" % type(e)
print e
然后,这将告诉您引发的异常类型和消息
1有一些异常不是从异常继承的,即系统退出
,键盘中断
和生成退出
(文档:,)。如果您得到其中一个,我会感到惊讶,我希望您使用的PDF库遵循Python指南,从Exception
而不是BaseException
派生其异常。对于初学者,不要使用裸露的except
块,而是指定要捕获的异常类型。然后,您将缩小执行except
的情况。您的catch-all-except将针对任何异常运行。你真的不知道这是由于转换失败还是try块的其他原因。好吧,这是有道理的。当pdf转换失败时,如何捕获异常?另外,在try
中只包装实际测试异常时所需的代码。将除
以外的所有内容移到下面。当转换失败时,会引发什么异常?对于初学者,不要使用裸露的除
块,而是指定要捕获的异常类型。然后,您将缩小执行except
的情况。您的catch-all-except将针对任何异常运行。你真的不知道这是由于转换失败还是try块的其他原因。好吧,这是有道理的。当pdf转换失败时,如何捕获异常?另外,在try
中只包装实际测试异常时所需的代码。将除
之外的所有内容移到下方。当转换失败时,会引发什么异常?