Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Try/Except的问题_Python_Try Except - Fatal编程技术网

Python:Try/Except的问题

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

我有一些代码可以打开并搜索一个装满PDF的文件夹。我正在使用pdfminer进行pdf转换。但是,我的一些PDF文件不可读。我希望我的代码能够处理转换工作的PDF文件,并有效地跳过转换失败的PDF文件

我正在尝试使用try/except功能,但它似乎不起作用。对于失败的PDF,例外情况有效。但是,对于转换工作的PDF,将同时执行try和exception块

这是我的密码:

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
中只包装实际测试异常时所需的代码。将除
之外的所有内容移到
下方。当转换失败时,会引发什么异常?