可选的类型注释。检查是否为无后使用值?

时间:2019-02-12 01:31:08

标签: python-3.x typehints

我正在用python写一些带有类型注释的代码。我对Optional类型有疑问。例如,对于这样的代码:

maybe_number : Optional[int] =  ... # definition
if maybe_number == None:
    ...
else:
    # I know its int because i checked, but it is a typechecking error
    number : int = maybe_number 
    ...

我收到错误消息:

Incompatible types in assignment (expression has type "Optional[int]", variable has type "int")

如何在python中表达我知道在某些分支中使用Union或Optional类型的值的实际类型。我需要以特定方式检查类型吗?

1 个答案:

答案 0 :(得分:0)

平等实际上并不能告诉您有关对象类型的太多信息,因为两个对象可以具有__eq__方法,这些方法可以使它们相等但具有不同的甚至不相关的类型。您可以使用身份比较来检查maybe_number 是否值为None

if maybe_number is None:
    ...
else:
    number : int = maybe_number