python - 缩小函数内部参数的联合类型
问题描述
我有一个接受参数的函数,该参数可以是 A 或 B 类型。如果传递了 A,则将其转换为 B 以便在内部进行进一步处理。
为简单起见,请考虑以下使用 int/float 的示例来说明场景:
import typing
def foo(x: typing.Union[int, float]):
if type(x) is int:
x = float(x)
x.as_integer_ratio() # method of float that does not exist for int
最后一行导致 mypy 错误:
错误:“Union[int, float]”的项目“int”没有属性“as_integer_ratio”
有没有一种很好的方法可以让 mypy 清楚,在if
类型x
基本上从 Union 更改为始终为 float 而不添加额外变量之后?
解决方案
您应该将您的if
声明更改为:
if isinstance(x, int):
这条线由 mypy 更好地处理,现在在执行之后if
,x = float(x)
它知道 x 不能是 int 并且错误消失了。
推荐阅读
- javascript - sequelize 中两个外键之间的 OR 运算符
- javascript - 点击javascript更改其他第n个孩子
- python - 如何读取用户输入?
- rotation - `rotate()` 没有设置 `BBAccumRotation`?
- python - 我可以使用默认格式打印可迭代对象吗?
- javascript - 如何通过 ID 获取特定服务器?[discord.js]
- here-api - HERE Playground 和 REST 连接器结果之间的差异
- c - 共享内存系统VC中的矩阵问题
- c - C 程序执行但以“进程返回 2097152 (0x200000) 执行时间:12.976 秒”结束
- python - 我使用 pyglets Sprite.delete() 错了吗?