РЕДАКТИРОВАТЬ: Я обнаружил, что причина, по которой мои исключения не перехватываются, заключается в том, что
они на самом деле выдаются другой функцией,
куда я поместил попытку кроме блока. Ошибка новичка. Если мод хочет удалить
или предложите, как я могу отредактировать вопрос, пожалуйста, сделайте это. Я не удалил его, поскольку
у него есть ответ.
Я пытаюсь добавить обработку ошибок в свой код, который считывает данные из электронной таблицы Excel с использованием библиотеки pandas.
Я раньше не выполнял обработку исключений такого типа в Python, поэтому не уверен, что делаю неправильно.
В моем следующем фрагменте кода исключение FileNotFoundError работает нормально, когда я помещаю файл xlsx туда, где моя программа не может его найти. Моя программа завершает работу, отображая сообщение и имеет правильный статус завершения.
Код: Выделить всё
try:
xdf = pd.read_excel(xlsxdir + 'web_targets.xlsx', 'targets', skiprows=[0], index_col=None, na_values=['NA'], usecols = "A:F")
except KeyError as e:
print("Expected column headers not found")
sys.exit(1)
except TypeError as e:
print("Type Error")
sys.exit(1)
except FileNotFoundError as e:
print("Excel file not found " + str(e))
sys.exit(1)
Код: Выделить всё
Traceback (most recent call last):
File "/home/justin/projects/web_targets/venv/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 4410, in get_value
return libindex.get_value_at(s, key)
File "pandas/_libs/index.pyx", line 44, in pandas._libs.index.get_value_at
File "pandas/_libs/index.pyx", line 45, in pandas._libs.index.get_value_at
File "pandas/_libs/util.pxd", line 98, in pandas._libs.util.get_value_at
File "pandas/_libs/util.pxd", line 83, in pandas._libs.util.validate_indexer
TypeError: 'str' object cannot be interpreted as an integer
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./create_new_configs.py", line 60, in
for record in xdfToDict(xdf):
File "./create_new_configs.py", line 29, in xdfToDict
'app': row['App'],
File "/home/justin/projects/web_targets/venv/lib/python3.6/site-packages/pandas/core/series.py", line 871, in __getitem__
result = self.index.get_value(self, key)
File "/home/justin/projects/web_targets/venv/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 4418, in get_value
raise e1
File "/home/justin/projects/web_targets/venv/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 4404, in get_value
return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
File "pandas/_libs/index.pyx", line 80, in pandas._libs.index.IndexEngine.get_value
File "pandas/_libs/index.pyx", line 90, in pandas._libs.index.IndexEngine.get_value
File "pandas/_libs/index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 1619, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 1627, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'App'
Я немного поискал и, насколько я могу судить, делаю то же самое, что и примеры, например. Исключения KeyValue.
Мне просто хотелось бы иметь возможность обнаружить некоторые потенциальные ошибки ввода данных и вернуться к сценарию BASH, который я буду использовать для вызова этой программы. подходящий код выхода.
Подробнее здесь: https://stackoverflow.com/questions/618 ... exceptions