我有一个这样的声明。
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
因为 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问题