Python3.8中能否用bool or None替代Union[bool, None]做类型注解?
Python3.8中用
bool or None做类型注解是否正确? 核心结论
用bool or None做类型注解完全错误,达不到你想要的「允许变量为bool或None」的目的。
原因分析
- 从Python语法层面看:
bool or None是普通逻辑表达式,并非类型注解语法。bool作为类本身是真值为True的对象,逻辑或运算or会直接返回第一个真值对象,也就是bool类。所以你写bool or None等价于只注解了bool类型,完全没把None纳入约束范围。 - PyCharm没报错的原因:它只是识别到表达式的结果
bool是合法类型,因此未抛出错误,但这和你实际需要的类型约束完全不符。
Python3.8中的正确替代方案
如果你不想用Union,可以选择以下两种标准写法:
- 使用
Optional[bool]:这是Union[bool, None]的官方简写,需先从typing模块导入:from typing import Optional var: Optional[bool] = None # 合法,支持bool或None取值 - 直接写
Union[bool, None]:虽然你不偏好,但这是Python3.8及更早版本中定义联合类型的标准方式:from typing import Union var: Union[bool, None] = True # 合法
补充:bool | None这种管道符的联合类型语法确实是Python3.9才引入的,3.8版本无法使用。
内容的提问来源于stack exchange,提问作者Amir reza Riahi
相关产品推荐
相关产品推荐

