Python“os.environ.get”可以返回非字符串吗?

mov*_*yer 7 python environment-variables

这里的这段代码中,他们os.environ用来获取环境变量的值,然后立即检查它是否是他们自定义类的实例。

value = os.environ.get(variable)
...
elif isinstance(value, ConfigList) or isinstance(value, ConfigTree):
Run Code Online (Sandbox Code Playgroud)

实际上有可能value将成为他们自定义类的实例吗?这是死代码吗?

zvo*_*one 8

我猜,任何来自外部的东西都只是一个字符串。

另一方面,如果您从 Python 代码中向环境添加一些东西,那么您就拥有更多的自由。

添加除字符串之外的任何内容仍然失败:

>>> os.environ['a'] = 89
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python27\lib\os.py", line 420, in __setitem__
    putenv(key, item)
TypeError: must be string, not int
Run Code Online (Sandbox Code Playgroud)

但是,您可以让自己的类从 str 继承:

class C(str):
    pass

os.environ['a'] = C()
Run Code Online (Sandbox Code Playgroud)

在 Python2 中,这似乎可以解决问题:

>>> type(os.environ['a'])
<class '__main__.C'>
Run Code Online (Sandbox Code Playgroud)

但是,在 Python 3 中却没有。看起来它只是保存了一个字符串:

>>> type(os.environ['a'])
<class 'str'>
Run Code Online (Sandbox Code Playgroud)

尽管如此,这并不能解释来自pyhocon的代码。我不明白该对象如何被推入os.environ.

除非他们猴子补丁os.environ......在那种情况下,一切皆有可能。