问题标签 [pylance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - VSCode:使用非本地导致变量类型“从不”
我在一些 Python 代码中看到了 VSCode/Pylance 的奇怪行为。考虑以下最小示例:
对 f() 的调用显然将外部设置x
为[10]
. 将鼠标悬停x
在第一条assert
语句(在函数调用之后)显示(variable) x: None
,没关系。但在assert
声明之后,将鼠标悬停在 x 上显示(variable) x: Never
。这会导致x
以下所有行的语法突出显示和自动完成都失败,因为 VSCode/Pylance 显然看到了一个“无类型”的变量。打字x.
甚至不显示对象的内置成员,如x.__class__
or x.__doc__
。分配x
给另一个类型的变量没有帮助。第一个断言导致 mypy 接受代码,而 PyLint 说Value 'x' is unsubscriptable
,因此其他工具之间似乎也存在一些分歧。这有点烦人,因为代码可以正常工作。
问题:这是 Pylance 中的错误吗?甚至是预期的行为?有什么方法可以强制 Pylance 看到正确的类型x
?
工具版本:
VSCode Python:v2021.5.842923320
VSCode Pylance:v2021.5.3
谢谢你和最好的问候,
菲利普
编辑:在GitHub 上发布问题
python - 我在我的 Tkinter GUI 中嵌入了一个绘图,我试图在绘图中添加一个显示鼠标位置的十字准线
在正常的绘图上,十字准线工作得很好, 请参见此处的屏幕截图
但是,当我的绘图嵌入到 GUI 中,也就是不是一个单独的窗口时,它不会显示它。我收到的代码警告之一是“光标”未访问Pylance
cursor = Cursor(plot, useblit=True, horizOn=True, vertOn=True, color="green", linewidth=2.0)
我的情节部分代码:
python - 自动完成不适用于 Visual Studio Code 中的 Jupyter Notebook
自动完成功能不适用于 Visual Studio 代码中的 jupyter notebook。它曾经工作过,就在一天前。有时它仍然可以工作,但只是在打开编辑器的前几秒钟,然后它就停止显示建议和自动完成代码。
以下是 jupyter 的所有 settings.json:
这是普通的 jupyter 窗口: Normal Jupyter Window
这里是所有已安装的扩展: 已安装扩展
编辑:- 自动完成在其他语言中运行良好,奇怪的是,在我在 jupyter 中使用任何“导入语句”之前它运行良好。在调用“import”之前,它会向我显示“if”、“and”和其他简单关键字的建议,但是一旦我导入 numpy 或 pandas,它甚至会停止显示“if”、“and”或“def”的建议
python - 是否可以在 Python 中将通用 C[T] 静态类型为 T ?
我正在使用 SQLite,其中类型提示仍然远非完美,我最终得到了一个我认为我想做的 MCVE,它可能与静态类型的 ABC 有关。
例子:
我尝试使用 ABC,但由于它们似乎使用 ABC.register() 进行注册,因此类型检查器不知道我在说什么。
我也尝试过通用协议,但我必须设计一个协议来保护每种类型 T 所期望的功能。
我正在使用 Pyright/Pylance 对此进行测试,但如果这是问题的一部分,则可以将替代方案视为答案。
我还发现https://github.com/antonagestam/phantom-types根据文档,“不会增加任何处理或内存开销”。这并不完全正确,因为它们__instancecheck__
在运行时通过 .parse 和协议(尽管它们在技术上不会创建任何新对象,但它们在堆栈帧中确实有一些开销)。
唉,这不是一个静态检查器,虽然那里的解决方案似乎用来assert isinstance("hello", MyStr)
确保类型检查器可以在该行之后满足此类保证(这至少在 mypy 和 pylance 中有效),但它不会触发任何类型检查时间错误与assert isinstance("hello", MyInt)
. 该代码将在运行时使断言失败。
最终,我希望能够拥有一个T
可以调用的类型,C[T]
这样当我col_name = Column(String, ...)
在模型中声明 a 时,我就可以col_name = "value"
对其进行静态检查或对其进行一些变体。
这可能吗?如果是,那么魔法在哪里?
python - 泛型函数的类型提示?
考虑以下代码:
我从 pylance 收到错误消息List[ActionDef[_T]]
:
如果我这样做List[ActionDef]
,它也会抱怨:
基本上,它希望我做类似的事情ACTION_DEFS: List[ActionDef[int]] = []
,这会破坏整个观点。
问题1:如何定义写ACTION_DEFS
类型声明?
问题2(标题来自哪里):有没有一种方法可以定义Prompter
我不需要随身携带的方式[_T]
?
python - 可以在 Python 中键入 *(解包)运算符吗?或者任何其他可变参数 args 函数,使得所有可变参数类型都在结果类型中?
使用类型存根,我想知道是否可以在 Python 中表达一种类型,允许您为任意数量的参数正确键入:
乍一看,我带着:
但这当然只会正确输入第一个 T。
是为所有 arities 编写覆盖的唯一可能方法吗?
这也不完整,因为它没有携带足够的类型信息来键入以下内容: