ImportError:无法从“输入”中导入名称“ Literal”

时间:2020-04-14 11:17:20

标签: python python-import python-3.7

我最近开始使用PEP 484PEP 586使代码更清晰,更易于访问。到目前为止,一切都还可以,但是当我想使用软件包Literal中的typing时,似乎无法导入。 最令人惊讶的是,PyCharm根本不抱怨导入或使用它。

我最后想要使用的代码看起来像这样:

SomeVar = TypeVar("SomeVar", Literal['choice1'], Literal['choice2'], someType)

在您可以使用字符串来描述所需内容或已解决方案的情况下使用它,例如:

def someFunc(my_var: SomeVar = 'choice1'):
    result = []
    if my_var == 'choice1':
        result.append(...)
    else:
        result = my_var
    return result

我在Python 3.7.7中使用Anaconda环境。

2 个答案:

答案 0 :(得分:3)

docs中所述,typing.Literal仅在Python 3.8及更高版本中可用。

答案 1 :(得分:2)

在 Python 3.8 及更高版本中使用 Literal

from typing import Literal

在所有 Python 版本中使用 Literal (1)

Literal 已在 3.8 中添加到 typing.py,但您仍然可以在旧版本中使用 Literal

首先安装 typing_extensions (pip install typing_extensions) 然后

from typing_extensions import Literal

这种方法应该也适用于 Python 3.8 及更高版本。

在所有 Python 版本中使用 Literal (2)

为了完整起见,我还添加了导入 Literal 的 try-except 方法:

try:
    from typing import Literal
except ImportError:
    from typing_extensions import Literal

这也适用于所有 Python 版本,因为如果您使用的是 Python 3.7 或更早版本,则安装了 typing_extensions

相关问题