#python #pylint
#python #pylint
Вопрос:
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 в последней строке.
Я попытался использовать возвращаемый тип Union[bool, User] для get_user()
, но это не решило проблему.
Каков pythonic способ «приведения» типа из bool в User?
Комментарии:
1. Пожалуйста, обратите внимание, что ответы не должны быть в вопросах — вы можете опубликовать ответ ниже или просто удалить вопрос. Но да, я бы сказал
None
, что это возвращаемое значение pythonic для отсутствующего пользователя; недостаткомUnion[bool, User]
является то, чтоif not user
только исключаетFalse
, а неTrue
.
Ответ №1:
Изменение возвращаемого типа get_user()
функции на typing.Optional[User]
решает проблему.
pylint жалуется, потому что, согласно только подсказке типа, user
может быть значением True
и True.name
вызывать исключение. pylint не оценивает путь к коду (он не знает, get_user()
возвращает ли только False
, нет True
; он просто знает, что он должен возвращать bool .)
Комментарии:
1. Собираюсь удалить мой комментарий, поскольку он не относится к комментариям, и вы должны принять свой собственный ответ 🙂 Для других людей, которые могут счесть этот вопрос полезным, было бы полезно немного дополнительного объяснения в вашем ответе о том, почему (как указано в комментариях).