os.getenv的Python typehint导致下游不兼容的类型错误

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

使用os.getenv检索环境变量时,默认行为返回os.getenv的类型。这是有问题的,因为利用这些变量的任何下游方法/功能都可能会定义为明确接受Optional[str]类型。 是否有接受的用法来解决此问题或强制执行str返回类型?

strgetenv的存根文件定义中,您可以找到typeshed的返回类型为getenvOptional[str],具体取决于Union[str, T_] kwarg的用法。

我现在可以看到的四个选项是:

  1. [定义任何下游操作以接受default类型作为参数。感觉不太正确,因为可能无法以Optional[str]类型有意义的方式来构造函数/方法。即,该操作没有理由将特定参数设为Optional
  2. None kwarg用于default,并提供getenv默认值。这似乎更正确,但是要求每次使用str时都设置一个默认值。我唯一看到的问题是这样做可能会混淆测试或在不同环境中的使用。
  3. 定义某种变量检查功能。这可能是一个函数,它接受要加载的环境变量的名称,显式返回一个字符串,如果环境变量不存在,则会引发错误。
  4. getenv返回的值的类型明确设置为str。我真的不喜欢这样,因为它期望始终正确配置环境,根据我的经验,这不是一个很好的假设。
  5. 在下面的示例中引发mypy错误。

getenv

以上引发mypy错误:

错误:“ some_func”的参数1具有不兼容的类型“ Optional [str]”;预期的“ str”

[使用os.getenv检索环境变量时,默认行为返回Optional [str]类型。这是有问题的,因为任何利用这些变量的下游方法/功能都将...

python mypy python-typing
2个回答
0
投票

tl; dr


0
投票

[SOME_VAR是可选的,因为它可以是None

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