为什么在使用Pandas的concat函数后,Visual Studio Code说我的代码不可达?
Koda Ulaşılamıyor -> Code is unreachable
在使用 pd.concat()
之后,我发现Visual Studio代码把我的代码变成灰色,并且提示说这些代码是不可达的。虽然这个编辑器运行得还不错,但我觉得很烦人,我希望我的代码能恢复成五颜六色的样子。
我该怎么做才能让编辑器不把我的代码变灰,而不需要改变当前的编程语言呢?
4 个回答
以下方法对我有效:
sorted_excel_files:list[pd.DataFrame] = [sorted_excel_file_1, sorted_excel_file_2]
sorted_excel_file = pd.concat(excel_files)
原因是因为在 pandas-stubs
中有一个重载的方法签名,它规定如果给一个 Iterable[None]
,就一定会抛出异常。实际上,它只接受 Iterable[Series]
或 Iterable[DataFrame]
。VSCode 的静态分析并不会检查这个是否正确,所以它错误地认为有无法到达的代码。
关于谁应该负责让这个正常工作,大家有一些争论(可以查看这个 GitHub 问题),但我想提供一个简单的解决方案,不需要对存根进行复杂的修改,而且应该总是有效。
如果你给输入添加类型提示,让 VSCode 确认输入会是接受的类型之一,那么它就不会认为程序会崩溃。
在你的情况下,问题在于 sort_values 说它会返回 Any
。所以,你可以通过给前面的变量添加类型提示来解决这个问题:
sorted_excel_file_1: pd.DataFrame = df.iloc[:82].sort_values(by='H-arm', ascending=True)
sorted_excel_file_2: pd.DataFrame = df.iloc[82:].sort_values(by='H-arm', ascending=True)
这是一个目前在 pandas-stubs
中存在的bug。
在pandas-stubs中,concat
的匹配重载现在返回的是Never。
根据Pylance GitHub上的这个建议,你可以通过在 ...\.vscode\extensions\ms-python.vscode-pylance-2024.3.1\dist\bundled\stubs\pandas\core\reshape\concat.pyi
文件中注释掉这个Never重载来解决pandas-stubs的问题。
@overload
def concat(
objs: Iterable[None] | Mapping[HashableT1, None],
*,
axis: Axis = ...,
join: Literal["inner", "outer"] = ...,
ignore_index: bool = ...,
keys: Iterable[HashableT2] = ...,
levels: Sequence[list[HashableT3] | tuple[HashableT3, ...]] = ...,
names: list[HashableT4] = ...,
verify_integrity: bool = ...,
sort: bool = ...,
copy: bool = ...,
) -> Never: ...