错误,"urljoin "的类型变量 "AnyStr "的值在mypy中不能为" Optional[str]"。在mypy中,"urljoin "的类型变量 "AnyStr "的值不能是 "Optional[str]"

问题描述 投票:0回答:1

我有一个这样的声明。

import os
from urllib.parse import urljoin

ES_SEARCH_URL = urljoin(base=os.getenv("ELASTICSEARCH_URL"), url="index/_search")

我试过给很多类型的 ES_SEARCH_URL但每当我运行mypy时,它总是给出以下错误。

error: Value of type variable "AnyStr" of "urljoin" cannot be "Optional[str]"

到目前为止,我已经尝试过的选项。

from typing import Optional, AnyStr, Union
ES_SEARCH_URL: Union[str, None] = urljoin(base=os.getenv("ELASTICSEARCH_URL"), url="index/_search")
ES_SEARCH_URL: Optional[str] = urljoin(base=os.getenv("ELASTICSEARCH_URL"), url="index/_search")
ES_SEARCH_URL: Optional[AnyStr] = urljoin(base=os.getenv("ELASTICSEARCH_URL"), url="index/_search")

如何解决这个错误?请帮助我。Python 版本。Python 3.8

python urllib mypy python-3.8 static-typing
1个回答
1
投票

因为 os.getenv 可以返回 None mypy无法知道它是一个字符串值还是一个 None.

试试给它一个默认值。

os.getenv("ELASTICSEARCH_URL", default="http://some.url.example.com/")

或处理 None 案。

base_url = os.getenv("ELASTICSEARCH_URL")
if base_url is None:
  # handle here
ES_SEARCH_URL = urljoin(base=base_url, url="index/_search")

参考: 这个github问题

© www.soinside.com 2019 - 2024. All rights reserved.