Kel*_*aar 7 python numpy python-typing
我想了解为什么float和np.float64类型的联合会在这里产生[arg-type]键入错误,但单独使用类型就可以了:
import numpy as np
from numpy.typing import ArrayLike
from typing import Any, Union
def as_float_array(a: ArrayLike) -> Any:
...
w: float = float(4)
as_float_array([w])
x: np.float64 = np.float64(4)
as_float_array([x])
y: Union[float, np.float64] = float(4)
as_float_array([y])
z: Union[float, np.float64] = np.float64(4)
as_float_array([z])
Run Code Online (Sandbox Code Playgroud)
/.../scratch.py:17: error: Argument 1 to "as_float_array" has incompatible type "List[Union[float, floating[_64Bit]]]"; expected "Union[Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]], Union[Union[_SupportsArray[dtype[Any]], Sequence[_SupportsArray[dtype[Any]]], Sequence[Sequence[_SupportsArray[dtype[Any]]]], Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]], Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]]]], Union[bool, int, float, complex, str, bytes, Sequence[Union[bool, int, float, complex, str, bytes]], Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]], Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]], Sequence[Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]]]]]]"
/.../scratch.py:20: error: Argument 1 to "as_float_array" has incompatible type "List[Union[float, floating[_64Bit]]]"; expected "Union[Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]], Union[Union[_SupportsArray[dtype[Any]], Sequence[_SupportsArray[dtype[Any]]], Sequence[Sequence[_SupportsArray[dtype[Any]]]], Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]], Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]]]], Union[bool, int, float, complex, str, bytes, Sequence[Union[bool, int, float, complex, str, bytes]], Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]], Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]], Sequence[Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]]]]]]"
Found 2 errors in 1 file (checked 1 source file)
Run Code Online (Sandbox Code Playgroud)
预期格式:
Union[
Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]],
Union[
Union[
_SupportsArray[dtype[Any]],
Sequence[_SupportsArray[dtype[Any]]],
Sequence[Sequence[_SupportsArray[dtype[Any]]]],
Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]],
Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]]]
],
Union[
bool, int, float, complex, str, bytes,
Sequence[Union[bool, int, float, complex, str, bytes]],
Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]],
Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]],
Sequence[Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]]]
]
]
]
Run Code Online (Sandbox Code Playgroud)
值得注意的是,按如下方式定义新类型可以消除错误:
/.../scratch.py:17: error: Argument 1 to "as_float_array" has incompatible type "List[Union[float, floating[_64Bit]]]"; expected "Union[Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]], Union[Union[_SupportsArray[dtype[Any]], Sequence[_SupportsArray[dtype[Any]]], Sequence[Sequence[_SupportsArray[dtype[Any]]]], Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]], Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]]]], Union[bool, int, float, complex, str, bytes, Sequence[Union[bool, int, float, complex, str, bytes]], Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]], Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]], Sequence[Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]]]]]]"
/.../scratch.py:20: error: Argument 1 to "as_float_array" has incompatible type "List[Union[float, floating[_64Bit]]]"; expected "Union[Sequence[Sequence[Sequence[Sequence[Sequence[Any]]]]], Union[Union[_SupportsArray[dtype[Any]], Sequence[_SupportsArray[dtype[Any]]], Sequence[Sequence[_SupportsArray[dtype[Any]]]], Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]], Sequence[Sequence[Sequence[Sequence[_SupportsArray[dtype[Any]]]]]]], Union[bool, int, float, complex, str, bytes, Sequence[Union[bool, int, float, complex, str, bytes]], Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]], Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]], Sequence[Sequence[Sequence[Sequence[Union[bool, int, float, complex, str, bytes]]]]]]]]"
Found 2 errors in 1 file (checked 1 source file)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |