Python 3 处理错误 TypeError:不允许捕获不继承自 BaseException 的类
Posted
技术标签:
【中文标题】Python 3 处理错误 TypeError:不允许捕获不继承自 BaseException 的类【英文标题】:Python 3 handling error TypeError: catching classes that do not inherit from BaseException is not allowed 【发布时间】:2019-04-08 10:36:19 【问题描述】:当我运行这段代码时:
i=0
while i<5:
i=i+1;
try:
SellSta=client.get_order(symbol=Symb,orderId=SellOrderNum,recvWindow=Delay)
except client.get_order as e:
print ("This is an error message!".format(i))
#End while
我收到了这个错误:
TypeError: catching classes that do not inherit from BaseException is not allowed
我读过这个胎面Exception TypeError warning sometimes shown, sometimes not when using throw method of generator,这个Can't catch mocked exception because it doesn't inherit BaseException也读过这个https://medium.com/python-pandemonium/a-very-picky-except-in-python-d9b994bdf7f0
我用这段代码修复它:
i=0
while i<5:
i=i+1;
try:
SellSta=client.get_order(symbol=Symb,orderId=SellOrderNum,recvWindow=Delay)
except:
print ("This is an error message!".format(i))
#End while
结果是忽略错误并转到下一个,但我想捕获错误并打印它。
【问题讨论】:
由于这个问题在我的搜索中出现的频率很高 - 在我的情况下,错误是由我的简单错误引起的,实例化错误类,即except TypeError():
而不是except TypeError:
。
【参考方案1】:
我在西班牙语堆栈中发布了question,结果更好。 翻译和总结: 发生错误是因为在异常子句中您必须指出您捕获的异常。异常是从基类 Exception 继承(直接或间接)的类。
相反,我将 client.get_order 放在 python 期望异常名称的位置,而您放置的是对象的方法,而不是从 Exception 继承的类。
解决办法是这样的
try:
SellSta=client.get_order(symbol=Symb,orderId=SellOrderNum,recvWindow=Delay)
except Exception as e:
if e.code==-2013:
print ("Order does not exist.");
elif e.code==-2014:
print ("API-key format invalid.");
#End If
您需要为here 中的每个异常编写代码
【讨论】:
我使用的是 PyMongo 3.8,它说object has no attribute 'code'
,所以我这样做了:除了 Exception as err: if "already exists" in err._message: pass
@BenjiA。问题解决了吗?如果是,您是如何处理错误的?
@PrabhuKhannaMahadevan ..如果您想首先检查错误对象是否具有code
属性,则可以执行if hasattr(e, "code"): # do_stuff_with_code_attribute_here
之类的操作。
我在执行except queue.Empty():
而不是except queue.Empty:
时也遇到了这个错误,这正是我真正想做的。以上是关于Python 3 处理错误 TypeError:不允许捕获不继承自 BaseException 的类的主要内容,如果未能解决你的问题,请参考以下文章
python 3.5: TypeError: a bytes-like object is required, not 'str'
Python 酸洗错误:TypeError:对象泡菜未返回列表。 numpy的问题?
Python多处理-TypeError:无法腌制'_tkinter.tkapp'对象