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

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

我有这样的声明:

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版本:Python3.8

因为 os.getenv 可以 return 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")

参考:this github issue