【问题标题】:Pylint type confusionPylint 类型混淆
【发布时间】:2021-01-08 13:30:11
【问题描述】:
user = get_user() # returns object of type User or False
if not user:
  raise HTTPException()
print(user.name) # pylint error: Instance of 'bool' has no 'name' member

目标:去掉最后一行的pylint错误。

我尝试为 get_user() 使用 Union[bool, User] 返回类型,但这并没有解决问题。

将类型从 bool 转换为 User 的 Pythonic 方式是什么?

【问题讨论】:

  • 请注意,答案不应出现在问题中 - 您可以在下面发布答案或删除问题。但是是的,我会说None 是缺少用户的pythonic 返回值; Union[bool, User] 的缺点是 if not user 只排除 False,而不是 True

标签: python pylint


【解决方案1】:

get_user()函数的返回类型改为typing.Optional[User]即可解决问题。

pylint 抱怨,因为根据类型提示onlyuser 可能是值True,而True.name 会引发异常。 pylint 不评估代码路径(它不知道get_user() 是否只返回False,而不是True;它只知道它应该返回一个布尔值。)

【讨论】:

  • 要删除我的评论,因为它不属于 cmets,你应该接受你自己的答案 :) 对于其他可能觉得这个问题有用的人,在你的关于为什么(如 cmets 中所述)的回答会很有用。
猜你喜欢
  • 2013-12-31
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2019-03-15
相关资源
最近更新 更多