【发布时间】:2022-01-08 16:51:25
【问题描述】:
我对使用 Python 比较陌生,前几天在 Leetcoding 时发现了一些奇怪的东西。我用 Python 3.8 运行它并得到一个对象属性错误。但是由于条件为真,因此不应访问该属性。似乎这已经得到了回答,但我找不到重复的问题。任何人都可以帮助我指出正确的方向吗?感谢您的帮助。
#AttributeError: 'NoneType' object has no attribute 'val'
a = None
b = (a.val, 0)[a is None]
#works
a=None
if a is None:
b=0
else:
b=a.val
【问题讨论】:
-
你从哪里得到第一个语法?这不是三元条件在 python 中的工作方式。您的代码正在使用
(a.val,0)创建一个元组。这就是错误。改用这个b = a.val if a is None else 0。 -
@Adithya 这是来自stackoverflow.com/a/470376/446792 的老把戏,这是一种不起作用的情况
-
谢谢.. 认为这是一个技巧。没想到新手是从聪明的代码开始的。 ;)
-
问题是 b 首先创建一个元组,然后它执行
[a is None]部分......我们知道 a.val 是未定义的,所以它会导致错误。检查我的答案以获得解释!