使用xlrd跟踪错误的文件名

我正在使用xlrd打开一个“.xlsx”文件,并从中读取数据进行修改。 如果文件名存在,一切正常。 但如果文件不存在,我会得到一个回溯。

我正在使用的代码是(只是相关的部分):

from xlrd import open_workbook, XLRDError from xlwt import * filename = "./resources/tags_meters.xlsx" bad_filename = "./resources/meters.txt" # Use this to test bad filenames filename = bad_filename 

还有我使用函数来检查文件是否可以打开:

 def test_book(filename): try: open_workbook(filename) except XLRDError as e: print "error is" + e.message return False else: return True if test_book(filename): print "Book Ok ... Opening file" wb = open_workbook(filename) else: print "Book not opened" 

我得到的追溯是:

 Traceback (most recent call last):  File ".\excelread.py", line 38, in <module>    if test_book(filename):  File ".\excelread.py", line 31, in test_book    open_workbook(filename)  File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 395, in open_workbook    with open(filename, "rb") as f: IOError: [Errno 2] No such file or directory: './resources/meters.txt' 

为什么exception不起作用? 我正在testing这个,因为我需要知道一个文件是否存在,如果不是,我需要创build它。

您只能在except子句中捕获XLRDError ,并在文件不存在时发生IOError

您可以使用相同的except子句:

 except(XLRDError, IOError): #.... 

或者,也许更好,如果你想以不同的方式对待他们:

 except XLRDError: # treat this error # ... except IOError: # treat the case where file doesn't exist