from dataclasses import dataclass
@dataclass
class InventoryItem:
"""Class for keeping track of an item in inventory."""
name: str | None = None
unit_price: float
quantity_on_hand: int = 0
TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'
Python 3.9
我认为问题是使用最新版本的 python,如何解决它。
我尝试使用 '或者' 但这没有帮助
你说的对,问题出在 Python 版本上。Python 3.9 不支持
|
运算符用于类型提示中的 "或" 语义。这个功能是在
Python 3.10
中才被引入的。
你有几种解决方法:
1. 升级 Python 版本:
最直接的解决方法是将你的 Python 版本升级到 3.10 或更高版本。这样你就可以直接使用
|
运算符来表示联合类型。
2. 使用
Union
类型:
在 Python 3.9 中,你需要使用
typing
模块中的
Union
类型来表示一个变量可以接受多种类型。
from typing import Union
from dataclasses import dataclass
@dataclass
class InventoryItem:
"""Class for keeping track of an item in inventory."""
name: Union[str, None] = None
unit_price: float
quantity_on_hand: int = 0
3. 使用字符串字面量 (仅限类型提示):
在 Python 3.9 中,你也可以使用字符串字面量来表示联合类型,但这种方法仅限于类型提示,不能用于运行时类型检查。
from dataclasses import dataclass
@dataclass
class InventoryItem:
"""Class for keeping track of an item in inventory."""
name: 'str | None' = None # 注意引号
unit_price: float
quantity_on_hand: int = 0
建议:
- 如果你能升级 Python 版本,这是最推荐的解决方案。
-
如果不能升级,使用
Union
类型是更标准的做法,也能在运行时进行类型检查。
希望这些信息能帮到你!
标签:python,python-typing,nonetype From: 76712720