我有以下功能:
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
as 参数总是会导致str
返回。
如果我使用 pylance 在 vscode 中编写以下内容(它在后台使用 pyright):
def test(element: etree._Element):
variable = _get_inner_xml(element)
在这种情况下,我得到类型提示(variable) variable: str | None
。我希望 pylance 知道该变量应该是 type str
。我在监督什么吗?这可能是一个错误吗?
如果这按预期工作:是否有可能手动告诉 pylance“只要这个函数得到 aetree._Element
它就会返回 astr
并且每当我通过None
它时它就会返回None
”?