- 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/
是否有当前获取方式 Google's Pytype在 Vim 8/Neovim 中运行? 我可以得到微软的 Pyright使用 coc.nvim 轻松工作但我的团队改用 Pytype。 有没有人尝试过
是否有类似 type 的命令可以递归遍历集合以返回 pytype 样式的声明(如果存在)?我意识到具有异构元素的集合可能会出现问题。 例如,我希望看到类似这样的输出: >>> fancy_type({
我正在使用 pytype (2019.10.17,最新版本到现在)作为我的代码类型检查器开发了一个工具,可以通过索引文件随机读取msgpack文件,索引文件记录了每条消息的位置(msgpack文件中的
使用 lxml 库的 objectify API 为元素设置值,将自动检测到的 pytype 分配给该元素和所需的命名空间, 默认情况下。 例如设置根元素: root = objectify.Elem
我是一名优秀的程序员,十分优秀!