Python尝试除了块不识别错误类型

Jos*_*osé 5 python

我的scrpt有以下几行:

libro_dia = xlrd.open_workbook(file_contents = libro_dia)
Run Code Online (Sandbox Code Playgroud)

如果libro_dia无效,则会引发以下错误:

XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '<!DOCTYP'
Run Code Online (Sandbox Code Playgroud)

我想要处理这个错误,所以我写道:

try:
    libro_dia = xlrd.open_workbook(file_contents = libro_dia)
except XLRDError:
    no_termina = False
Run Code Online (Sandbox Code Playgroud)

但它引发了以下错误:

NameError: name 'XLRDError' is not defined
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

mmo*_*ore 9

您没有导入XLRDError.我不熟悉xlrd,但是类似于:

from xlrd import XLRDError
Run Code Online (Sandbox Code Playgroud)

可能有用.或者,Error在处理时符合您的资格:

try:
    libro_dia = xlrd.open_workbook(file_contents = libro_dia)
except xlrd.XLRDError: #<-- Qualified error here
    no_termina = False
Run Code Online (Sandbox Code Playgroud)

以上是假设您有以下导入:

import xlrd
Run Code Online (Sandbox Code Playgroud)

回应你的评论:

有几种方法可以在python中使用import.如果使用导入import xlrd,则必须将该模块中的每个对象限定为xlrd.SomeObject.另一种方法是使用表单from xlrd import *,这将允许您引用XLRD错误而不使用其"模块名称空间".这虽然是懒惰的,但却是一个坏主意,因为它可能导致命名空间冲突.如果您想在没有限定条件的情况下引用错误,那么正确的方法就是这样from xlrd import XLRDError,这将允许您说出来except XLRDError.阅读有关Python模块的更多信息