Я обрабатываю чтение данных из файла test.xls
следующим образом:
from sys import exe_info
try:
book = xlrd.open_workbook('test.xls')
sh = book.sheet_by_index(0)
for row in range( 1, sh.nrows ):
for index, value in enumerate(sh.row_values(row)):
process_value(value)
except:
print exc_info()[1]
Если во время обработки возникает исключение, process_value(value)
означает, что в этой конкретной строке * 1006 что-то не так* file.but, когда я печатаю exc_info()[1]
, я могу получить описание исключения как
'ascii' codec can't encode characters in position 7-10: ordinal not in range(128)
, но если я печатаю функцию exc_info()
, это дает следующий вывод
(<type 'exceptions.UnicodeEncodeError'>, UnicodeEncodeError('ascii', u'bokor b\xe3\u0192\xe2\xa9la', 7, 11, 'ordinal not in
range(128)'), <traceback object at 0x01067080>)
Так что, если я хочу показать исключение для пользователя, то пользователь заинтересован в конкретной строке файла that.xls
, которая вызывает ошибку. Так что при выводе exc_info()
я вижу слово
u'bokor b\xe3\u0192\xe2\xa9la'
Thisэто слово из файла XLS.Если мы не можем показать, для какой строки возникает ошибка, если я, по крайней мере, покажу это слово выше, это поможет найти это слово и удалить это слово.Я не могу получить это конкретное слово от exc_info()
или есть какой-то лучший способ справиться с этой ситуацией?