标签: python-typing

Python 类型提示与数字

我刚刚遇到了 Python 类型提示的奇怪行为。

>>> def x(y: int):
    return y
>>> d=x('1')
>>> print(type(d))
<class 'str'>
>>> d
'1'
Run Code Online (Sandbox Code Playgroud)

当我将数字作为字符串传递到参数被转换为 int 的函数时,它仍然会生成字符串。我认为这种意想不到的行为的关键在于它不是铸造,而是暗示。但为什么它会这样呢?如果我传递“one”作为参数,它会给我一个 NameError。

python type-hinting python-typing

0
推荐指数
1
解决办法
994
查看次数

ImportError:无法导入名称“Annotated”和“ValueRange”

你好我正在使用Python 3.8

我正在实现一个带有修复列表的数据类,为了做到这一点,我有以下代码:

from dataclasses import dataclass
from typing import Annotated, List, ValueRange
from pydantic import validate_arguments

@validate_arguments
@dataclass
class WorldArea:
    ...
    data: Annotated[List[float], ValueRange(1, 3)]
    ...
Run Code Online (Sandbox Code Playgroud)

这个想法是数据将是一个包含 1、2 或 3 个元素的列表,正如您所看到的,我正在使用 Annotated 和 ValueRange,但是当我执行时,我收到以下错误:

文件“a.py”,第 2 行,来自键入导入列表,ValueRange ImportError:无法从“打字”导入名称“注释”

文件“a.py”,第 2 行,来自键入导入列表,ValueRange ImportError:无法从“打字”导入名称“ValueRange”

python python-dataclasses python-typing pydantic

0
推荐指数
1
解决办法
9314
查看次数

mypy:如何在可调用类型上应用 *args?

我有一个如下所示的功能,

def run_the_f(f):
  # run f function after some validation
Run Code Online (Sandbox Code Playgroud)

根据某些条件,f 函数的签名会发生如下变化f(1.0), f(1.0,2.0), f(1.0,2.0,3.0,..)。换句话说,f 中输入参数的数量可以变化,类似于pyspark 中的 udf f

我正在使用 mypy 并且我在下面尝试了失败,

def run_the_f(f: Callable[[*float],float]):
  # run f after some validation
Run Code Online (Sandbox Code Playgroud)

有人可以支持在 Callable 中填写什么吗?

python mypy python-typing

0
推荐指数
1
解决办法
793
查看次数

嵌套 defaultdict 的类型提示

编写类型提示的正确方法是什么defaultdict(lambda: defaultdict(set))

我使用Python 3.10.5和mypy 0.971,发现mypy返回错误,因为var = defaultdict(lambda: defaultdict(set))没有类型提示。

前提

  • 第一个defaultdict和第二个defaultdict的所有键都是str
  • 第一个defaultdict的值为defaultdict。第二个 defaultdict 的值为set。(这可能是显而易见的。)

示例代码

from collections import defaultdict
var = defaultdict(lambda: defaultdict(set))
Run Code Online (Sandbox Code Playgroud)

输出

test.py:2: error: Need type annotation for "var"
Run Code Online (Sandbox Code Playgroud)

python defaultdict mypy python-typing

0
推荐指数
1
解决办法
1777
查看次数

为什么 mypy/PyCharm/etc 没有检测到 Type[T] 的类型错误?

考虑以下代码:

def verify(schema: Type[T], data: T) -> None:
    pass

verify(int, "3")
verify(float, "3")
verify(str, "3")
Run Code Online (Sandbox Code Playgroud)

我希望前两个verify()调用显示为类型错误,而最后一个则不会。

然而,在 PyCharm 和 mypy 中,它们都没有出现类型错误。我尝试启用所有可能的严格性标志和错误代码,但什么也没有。

我怎样才能让类型检查器对此进行类型检查?为什么会失败?

库喜欢apischema依赖这样的功能来进行类型检查,例如apischema.serialize(MyDataclass, my_dataclass),但这也不起作用。

python typing pycharm mypy python-typing

0
推荐指数
1
解决办法
98
查看次数

类型错误:无法实例化打字。可选

我有这样的方法:

def select_unassigned_variable(self, variables: List[V]) -> Optional(V):

我希望它返回某种类型的东西VNone在某些情况下。但我得到这样的错误:

TypeError: Cannot instantiate typing.Optional

我应该改变什么?

python python-3.x python-typing

-1
推荐指数
1
解决办法
1757
查看次数