【发布时间】:2020-09-01 10:17:45
【问题描述】:
我现在遇到过好几次我想捕获某个库引发的异常,但实际上需要一些时间才能找到该异常所在的位置。
示例
假设我想读取一些 csv 文件,除了分隔符可以是 2 个值之一。我会使用:
import pandas
try:
mydf=pandas.read_csv('Somefile.csv', sep=';')
if not someValidityChecks(mydf): raise myExc.NotValidError
except:
mydf=pandas.read_csv('Somefile.csv', sep=',')
现在这段代码捕获了所有异常,这并不是我真正想要的(它不是 Zen)。
我真正想要的是捕获NotValidError,以及如果遇到一些无效的csv 由pandas 抛出的异常:ParserError。
但是except myExc.NotValidError, ParserError 不起作用,因为ParserError 在我的上下文中没有定义。相反,它应该是pandas.errors.ParserError。
问题
是否有一些快速的方法可以找出定义异常的位置?
我应该捕获一个ParserError,只要让它被抛出就很容易找到,错误消息清楚地表明了这一点。然而,要找出错误来自哪里,我必须深入研究堆栈跟踪,并查看所有可以定义它的导入。
现在pandas 没有最复杂的结构,并且猜测错误可能在pandas.errors 中并不难,但仍然需要一些时间来检查。其他库可能在一些更意想不到的地方定义了它们的异常,或者遍布各处。找出抛出的实际错误(包括包)应该很容易,对吧?
环境
我正在使用 Anaconda/Spyder 3.3.2 和 Python 3.7
【问题讨论】:
标签: python python-3.x exception try-catch