8

我的脚本有以下行:

libro_dia = xlrd.open_workbook(file_contents = libro_dia)

libro_dia无效时,它会引发以下错误:

XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '<!DOCTYP'

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

try:
    libro_dia = xlrd.open_workbook(file_contents = libro_dia)
except XLRDError:
    no_termina = False

但它会引发以下错误:

NameError: name 'XLRDError' is not defined

这是怎么回事?

4

3 回答 3

16

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

from xlrd import XLRDError

可能会奏效。或者,在处理时限定您的Error

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

以上假设您有以下导入:

import xlrd

回应您的评论:

在 python 中有几种使用导入的方法。如果通过 using 导入import xlrd,则必须将该模块中的每个对象限定为 xlrd.SomeObject。另一种方法是使用 form from xlrd import *,这将允许您在没有其模块命名空间的情况下引用 XLRD 错误。不过,这是一个懒惰的坏主意,因为它可能导致命名空间冲突。如果您想在不限定错误的情况下引用错误,那么正确的做法是from xlrd import XLRDError,这将允许您说except XLRDError。阅读有关Python 模块的更多信息

于 2013-03-01T13:49:18.563 回答
4

XLRDError是一个自定义异常,必须像任何其他对象一样导入到您的命名空间。

except xlrd.XLRDError编辑:正如 Burhan Khalid 所指出的,如果您的模块中已经有,您可以将 except 块修改为import xlrd

于 2013-03-01T13:46:18.063 回答
0

尝试使用

 xlrd.XLRDError as e and e.message should contain the error string

样本:

   try:
            workbook = xlrd.open_workbook(sys.argv[1])
   except xlrd.XLRDError as e:
            print e.message
            sys.exit(-1)
于 2014-11-20T06:15:20.220 回答