我有一些代码可以打开并搜索一个装满 pdf 的文件夹。我正在使用 pdfminer 进行 pdf 转换。但是,我的一些 pdf 不可读。我希望我的代码能够处理那些转换有效的 pdf,并有效地跳过那些转换失败的 pdf。
我正在尝试使用 try/except 功能,但它似乎不起作用。对于失败的 pdf,异常(exception)有效。但是,对于进行转换的 pdf,会执行 try 和异常 block 。
这是我的代码:
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 转换工作时,为什么两个 block 都被执行?而且,我怎样才能防止这种情况发生呢?谢谢!
最佳答案
您可以做的一件事是,您可以使用 try ... except ...
的 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
block 中的代码完成且未引发异常时,才会执行 else
block 中的代码。如果 else
block 中引发异常, except
子句不会处理它。
except
,你就会 Handlebars 指放在耳朵里说“la”啦啦听不到你说话',Python 试图帮助你。
通常,最好只处理您期望的异常。如果您知道您的 PDF 库在出现问题时会引发 SomePDFException
,那么最好编写
except SomePDFException as e:
而不是
except:
但是,如果您不知道类型,则可以使用以下方法捕获大多数1个异常:
except Exception as e:
print "Got exception of type %s:" % type(e)
print e
然后,这会告诉您引发的异常的类型以及消息。
1有一些异常不是从 Exception
继承的,即 SystemExit
、KeyboardInterrupt
和 GeneratorExit
(文档: Python 2 、 Python 3 )。如果您得到其中之一,我会感到惊讶,并且我希望您使用的 PDF 库遵循 Python 指南,从 Exception
而不是 BaseException
派生异常。
关于Python:尝试/异常(exception)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19473397/