简体   繁体   中英

Traceback with bad filename using xlrd

I'm using xlrd to open a ".xlsx" file and read the data from it to modify it. If the filename exists everything is ok. but if the file doesn't exists I get a traceback.

The code that I'm using is (just relevant parts):

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

and afther that I use a function to read check if the file can be opened:

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"

The traceback that I got is:

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'

Why the exception is not working? I'm testing this because I need to know if a file exists or not, in case not, I need to create it.

You only catch the XLRDError in your except clause, and an IOError occurs when the file doesn't exist.

You can either use the same except clause for both:

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

Or, maybe better, if you want to treat them differently:

except XLRDError:
    # treat this error
    # ...

except IOError:
    # treat the case where file doesn't exist 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM