【发布时间】:2018-10-04 21:42:54
【问题描述】:
让我们考虑以下代码示例,我将使用它来引发 AttributeError 作为示例。
def test(first, second):
print("My age is " + first.age + " and my neighbour is " + second.age)
假设我有以下课程。
class Dummy(object):
def __init__(self):
pass
如果我用
调用函数d = Dummy()
d.__setattr__("age", "25")
test(d, Dummy())
我会得到一个 AttributeError,因为第二个 Dummy 没有属性 age。这是由second.age 引起的。
我现在的问题是,是否有一种方法可以找出导致错误的变量名称。看源码很明显是second,但是怎么在try except块中找到呢?
【问题讨论】:
-
为什么你的
except块必须知道是哪个对象导致了错误? -
不太清楚你的意思。您想查看运行时的回溯吗? stackoverflow.com/q/3702675/4180176
-
@Aran-Fey,我稍后要做的是某种形式的类型重建,我尝试通过测试一个函数来收集输入的约束(例如,所需的类型必须具有年龄属性)多个(可能是错误的)输入。如果我知道导致它的变量的名称,我可以找出我可以添加约束的地方。
-
@JoshuaNixon,查看回溯似乎是一个开始,但我能从中得到的只是
AttributeError("'Dummy' object has no attribute 'name'",)。但这里 Dummy 是变量的类型,而不是它的名称。 -
在 AttributeError 的特定情况下,您能否不解析异常并检查属性和类名与您的参数?此外,一些例外情况包括比消息更多的信息。
标签: python python-3.x exception