- 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/
基础问题 我要解决的基本问题是: 我有一个模板参数包 ArgTypes,我需要用包装在 std::optional 中的每个类型创建一个元组。例如:make_optional_tuple应该返回 st
我使用 createEntityAdapter 设置了一个简单的 redux store。初始状态包含实体、ID、状态、错误设置等 const carouselEventAdapter = creat
我有一些(遗留)代码,如下所示: void castFoo(string type, void* foo) { FooA* foo_a = NULL; FooB* foo_b = NULL;
我的代码是 const int *const ptrA = nullptr; auto *ptrB = &ptrA; 我对 const int *const ptrA 的看法是: (*
我目前正在尝试用 C++ 实现 XOR 链表。我尝试使用模板使其通用。编译时会弹出此错误,我无法解决这个问题。 我尝试使用模板在谷歌上搜索 XOR 链表,但到目前为止似乎还没有实现它。 异或链表.h:
我正在尝试找到一种方法来调用多个类成员函数,每个函数都有不同的参数,并且在调用前后会发生某些已知功能。 这个包装函数是我试过的,但是例如对它的最终调用不会编译错误: 'bool Wrapper(Wor
此代码在 上编译成功g++ ( Coliru ) ,但不是 Visual C++ ( rextester ) - 在线和我的桌面。 它是一个更大的 Visual Studio 2015 项目的简化版本
我正在尝试编写一个通用类,它传递一个键 key 对应于一组已知接口(interface)中的一个的键,稍后可以传递一个对象 thing 并类型安全地访问 thing[key]。这是我得到的: inte
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!