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将成为他们自定义类的实例吗?这是死代码吗?
我猜,任何来自外部的东西都只是一个字符串。
另一方面,如果您从 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......在那种情况下,一切皆有可能。
| 归档时间: |
|
| 查看次数: |
11487 次 |
| 最近记录: |