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 でインポートを使用するには、いくつかの方法があります。を使用してインポートする場合import xlrdは、そのモジュール内のすべてのオブジェクトを xlrd.SomeObject として修飾する必要があります。別の方法は、フォームを使用from xlrd import *することです。これにより、モジュールの名前空間なしで XLRD エラーを参照できます。ただし、名前空間の競合につながる可能性があるため、これは怠惰で悪い考えです。エラーを修飾せずに参照したい場合、正しい方法は でありfrom xlrd import XLRDError、これにより、 と言うことができますexcept XLRDErrorPython モジュールの詳細を読む

于 2013-03-01T13:49:18.563 に答える
4

XLRDErrorはカスタム例外であり、他のオブジェクトと同じように名前空間にインポートする必要があります。

編集:Burhan Khalidが指摘したように、モジュールにexcept xlrd.XLRDErrorすでにある場合は、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 に答える