python pandas read_excel没有捕获异常

问题描述 投票:0回答:1

编辑:我发现未捕获我的异常的原因是因为它们实际上是由其他函数抛出的我在这里放了try除了块。新秀错误。如果一个mod想删除或建议我如何编辑问题。我没有删除它有答案。

我正在尝试向我的代码添加一些错误处理,该代码使用pandas库从excel电子表格中读取数据。我之前没有在Python中完成这种类型的异常处理,所以不确定自己在做什么错。

在下面的代码片段中,当我将xlsx文件放在程序无法找到的位置时,FileNotFoundError异常工作正常。我的程序退出时会干净地显示该消息,并具有正确的退出状态。

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)

不幸的是,程序可以找到文件,但是具有意外的列键/标题,但KeyErrorValueError异常均未捕获,并且得到了以下回溯:

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 <module>
    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'

[起初我没有TypeError例外,但我想也许是因为它是第一个例外,因此您必须先“捕获”它,所以我添加了它,但没有任何改变。

我已经进行了一些搜索,据我所知,我正在做与示例相同的操作,例如KeyValue例外。

我希望能够捕获一些潜在的数据输入错误,并返回BASH脚本,我将使用合适的退出代码来调用该程序。

编辑:我发现未捕获我的异常的原因是因为它们实际上是由与我将tryexcept块放到不同的函数抛出的。新秀错误。如果是...

python pandas try-catch keyerror except
1个回答
0
投票
try:
    xdf = pd.read_excel(xlsxdir + 'web_targets.xlsx', 'targets', skiprows=[0], index_col=None, na_values=['NA'], usecols = "A:F")
except Exception as e:
    print(e)
© www.soinside.com 2019 - 2024. All rights reserved.