Если существует несколько возможных возвращаемых значений, должен ли пирайт автоматически определить правильное на основPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Если существует несколько возможных возвращаемых значений, должен ли пирайт автоматически определить правильное на основ

Сообщение Anonymous »

У меня есть следующая функция:

Код: Выделить всё

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('TEXT
TAIL')
innerXML = _get_inner_xml(root)
print(innerXML)
Насколько я понимаю, если я передаю None в качестве аргумента, я всегда получаю None в качестве возвращаемого значения. С другой стороны, аргумент etree._Element всегда приведет к возврату str.
Если я напишу следующее в vscode с использованием pylance (он использует пирайт под капотом):

Код: Выделить всё

def test(element: etree._Element):
variable = _get_inner_xml(element)
В этом случае я получаю переменную подсказки типа (переменную): str | Нет. Я ожидаю, что pylance знает, что переменная должна иметь тип str. Я что-то контролирую? Возможно, это ошибка?
Если это работает так, как задумано: есть ли возможность вручную сообщить pylance, что «всякий раз, когда эта функция получает etree._Element, она возвращает str и всякий раз, когда я передаю None, он возвращает None"?

Подробнее здесь: https://stackoverflow.com/questions/687 ... ally-infer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»