- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 pytype (2019.10.17,最新版本到现在)作为我的代码类型检查器开发了一个工具,可以通过索引文件随机读取msgpack文件,索引文件记录了每条消息的位置(msgpack文件中的偏移量)(存储在 msgpack 中的值)。
在消息类型的多样性方面,我使用typing.TypeVar
来实现泛型。 pytype 使用 TypeVar 时遇到问题。
Name: pytype
Version: 2019.10.17
Summary: Python type inferencer
Home-page: https://google.github.io/pytype
Author: None
Author-email: None
License: UNKNOWN
Location: /home/gaoyunpeng/miniconda3/envs/restore/lib/python3.6/site-packages
Requires: ninja, typed-ast, six, importlab, pyyaml, attrs
Required-by:
Python 3.6.4 :: Anaconda, Inc.
from typing import TypeVar
T = TypeVar('T')
def f(x: T):
print(x)
使用命令运行上面的代码:pytype main2.py
:
Computing dependencies
Analyzing 1 sources with 0 local dependencies
ninja: Entering directory `/home/gaoyunpeng/workspace/.pytype'
[1/1] check main2
FAILED: /home/gaoyunpeng/workspace/.pytype/pyi/main2.pyi
pytype-single --imports_info /home/gaoyunpeng/workspace/.pytype/imports/main2.imports --module-name main2 -V 3.6 -o /home/gaoyunpeng/workspace/.pytype/pyi/main2.pyi --analyze-annotated --nofail --quick /home/gaoyunp
eng/workspace/main2.py
File "/home/gaoyunpeng/workspace/main2.py", line 4, in <module>: Invalid type annotation 'T' [invalid-annotation]
Appears only once in the signature
For more details, see https://google.github.io/pytype/errors.html#invalid-annotation.
ninja: build stopped: subcommand failed.
正如 https://google.github.io/pytype/errors.html#invalid-annotation
所述,这种情况是无效注释。
为什么代码无法通过pytype检查?
最佳答案
打印出来的错误信息解释了为什么这是一个类型错误。正如节目所说。引用错误消息的相关部分:
File "/home/gaoyunpeng/workspace/main2.py", line 4, in <module>: Invalid type annotation 'T' [invalid-annotation]
Appears only once in the signature
在给定的签名中只使用一次 TypeVar 是错误的,因为这样做毫无意义。在您的情况下,您也可以只使用类型签名 def f(x: object) -> None
。你想说 f
可以接受任何东西,Python 中的一切都是 object
的子类型。
只有当您想要坚持两种或多种类型完全相同时,您才应该使用泛型类型。例如,如果您想定义一个“身份”函数,使用泛型类型是正确的:
def identity(x: T) -> T:
return x
这将允许类型检查器推断出 identity("foo")
和 identity(4)
分别是 str 和 int 类型——返回类型始终与参数类型相同。
请注意,“您应该始终在每个签名中使用 TypeVar 两次或多次”这一规则对于泛型类中的方法也适用。当你这样做时:
class Foo(Generic[T]):
def test(self, x: T) -> None: pass
...test
的签名实际上是def test(self: Foo[T], x: T) -> None
。所以我们也隐含地总是在那里两次使用 TypeVar。
关于python - 'pytype' 为使用 TypeVar 的函数引发 FAILED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58708341/
我正在努力理解以下两个 TypeVar 之间的区别年代: from typing import TypeVar, Union class A: pass class B: pass T = TypeV
我被困在试图理解 TypeVar 的边界上当以两种不同的方式使用它时: Enums = TypeVar("Enums", Enum1, Enum2) Enums = TypeVar("Enums",
我有一个通用类 Graph[Generic[T], object] . 我的问题是,是否有任何函数返回作为泛型传递给类 Graph 的类型? >>> g = Graph[int]() >>> magi
我问自己是否有关于使用 TypeVar 的最佳实践和 overload在 python 中用于返回与输入相同类型的函数。考虑这些例子。 示例 1. 使用 TypeVar : from typing i
我正在使用 mypy和 typing python中的模块。想象一下我有一个泛型类型: ContainerT = TypeVar('ContainerT') class Thingy(Generic[
作为一名 C++ 程序员,以下代码对我来说似乎很自然,但它无法运行: from typing import TypeVar, Generic, List, NewType TPopMember = T
众所周知,在 C# 中,可以指定自定义属性规范的目标,如示例中所示 [method: SomeDecoration] [return: SomeOtherMark] int MyMethod(); “
我正在尝试使用 TypeVar 将 init 参数指示为某种类型。 但我做错了,或者它甚至可能不可能。 from typing import TypeVar T=TypeVar("T") class
假设我有一些通用函数: def foo(*args): for arg in args: print(arg) 如果我想输入提示 *args,根据 PEP我只需要指定类型 1
在Python中Documentation ,我们发现: T = TypeVar('T') # Can be anything S = TypeVar('S', bound=
TypeVar和 NewType似乎相关,但我不确定何时应该使用它们,或者在运行时和静态时有什么区别。 最佳答案 这两个概念的相关性并不比任何其他与类型相关的概念更多。 简而言之,TypeVar 是一
例如,我有一段代码如下: from typing import Type, TypeVar, cast class SuperClass: pass T = TypeVar('T', boun
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.3:jar (package-jav
我试图理解以下代码段中的类型提示 Getter[T]: 简化示例 T = TypeVar('T') Getter = Callable[[T, str], str] class AbstractCla
我正在使用 pytype (2019.10.17,最新版本到现在)作为我的代码类型检查器开发了一个工具,可以通过索引文件随机读取msgpack文件,索引文件记录了每条消息的位置(msgpack文件中的
出于某种原因,这段代码被认为是一个问题: from typing import * T = TypeVar("T", bound="Foo") S = TypeVar("S") class Foo(G
我在以下代码中遇到了问题,至少根据 mypy 是这样的: from multiprocessing import Pool from typing import Tuple, TypeVar T =
假设我有一个基类 from typing import List, Optional class Node: def __init__(self, name: str) -> None:
我想实现一个通用字典,将文本键映射到 MyConstrainingClass 或继承自 MyConstrainingClass 的类,因此我声明了 TypeVar 和 MyDict 类如下: from
如果我想要一个可以是多种可能类型的类型,Unions 似乎就是我表示的方式: U = Union[int, str] U 可以是 int 或 str。 我注意到,TypeVar允许可选的 var-ar
我是一名优秀的程序员,十分优秀!