- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下功能:
from lxml import etree
from typing import Union
def _get_inner_xml(element: Union[etree._Element, None]) -> Union[str, None]:
if element is None:
return None
# See https://stackoverflow.com/a/51124963
return (str(element.text or "") + "".join(etree.tostring(child, encoding="unicode") for child in element)).strip()
root = etree.fromstring('<html><body>TEXT<br/>TAIL</body></html>')
innerXML = _get_inner_xml(root)
print(innerXML)
我的理解是,如果我将 None
作为参数传递,我总是会得到 None
作为返回值。另一方面,作为参数的 etree._Element
将始终导致 str
返回。
如果我使用 pylance 在 vscode 中编写以下内容(它在后台使用 pyright):
def test(element: etree._Element):
variable = _get_inner_xml(element)
在这种情况下,我得到了类型提示 (variable) variable: str |无
。我希望 pylance 知道变量应该是 str
类型。我在监督什么吗?这可能是一个错误吗?
如果这按预期工作:是否有可能手动告诉 pylance “每当此函数获得 etree._Element
时,它将返回 str
并且每当我通过None
它返回 None
"?
最佳答案
这里的答案是使用 typing.overload
(文档 here ),它允许您为一个函数注册多个不同的签名。用 @overload
装饰的函数定义在运行时会被忽略——它们只是用于类型检查器——所以函数体可以用文字省略号 ...
填充, pass
, 或者只是一个文档字符串。您还需要确保提供不使用 @overload
的函数的“具体”实现。
from lxml import etree
from typing import Union, overload
@overload
def _get_inner_xml(element: etree._Element) -> str:
"""Signature when `element` is of type `etree._Element`"""
@overload
def _get_inner_xml(element: None) -> None: ...
"""Signature when `element` is of type `None`"""
def _get_inner_xml(element: Union[etree._Element, None]) -> Union[str, None]:
if element is None:
return None
# See https://stackoverflow.com/a/51124963
return (str(element.text or "") + "".join(etree.tostring(child, encoding="unicode") for child in element)).strip()
root = etree.fromstring('<html><body>TEXT<br/>TAIL</body></html>')
innerXML = _get_inner_xml(root)
print(innerXML)
关于python - 如果有多个可能的返回值,pyright 是否应该根据传递的参数自动推断出正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68754693/
我有以下功能: from lxml import etree from typing import Union def _get_inner_xml(element: Union[etree._Ele
我需要忽略一行的 pyright 检查。有什么特别的评论吗? def create_slog(group: SLogGroup, data: Optional[dict] = None): S
我刚开始使用Pyright .在运行良好的文件上运行它会出现很多错误。 This question类似,但指的是自己的模块。 例如 Import "numpy" could not be resolv
我在 VSCode 中有一个 Python 项目。其结构 root +-- docs +-- some_other_folder +-- src +-- app | +-- mai
我使用 pyright 进行类型检查,我也使用 pytest 在 Visual Studio Code 中进行测试。我的测试的文件夹结构是在包 root 中有一个 'test' 子文件夹。例如 | M
我想开始使用 Pyright与我团队的项目。我已经安装了the Visual Studio Code plugin ,并且可以在我工作时看到我的编辑器中的类型错误。但我希望能够将它作为我们测试套件的一
我使用 nvim-lspconfig 和 lsp-installer 设置了 Neovim LSP,我还安装了 pyright 服务器。 没有任何进一步的配置,它开箱即用。但是,当我在子文件夹中有一个
我是一名优秀的程序员,十分优秀!