の外にあるものは、以外のものは単なる文字列になります。
一方、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
しかし、あなたはSTRから継承された独自のクラスを作ることができます:Python2では
class C(str):
pass
os.environ['a'] = C()
を、これはトリックを行うようだ:
>>> type(os.environ['a'])
<class '__main__.C'>
しかし、Python 3ではそうではありません。それでも
>>> type(os.environ['a'])
<class 'str'>
、pyhoconからコードを説明していない:それは単なる文字列が保存されますように見えます。そのオブジェクトがos.environ
にどのようにプッシュされるのかはわかりません。
monkeypatched以外の場合os.environ
...その場合は何でも可能です。
[documentation states](https://docs.python.org/3/library/os.html#os.environ)「文字列環境を表すマッピングオブジェクト」。それは他の何かをほとんど排除する。 'str'の代わりにバイトが必要な場合、Python 3は' os.environb'を持っています。 'str'(または' NoneType')として定義されていない限り、環境変数が 'ConfigList'か' ConfigTree'となるかどうかは分かりません。 – Evert
コードが動作する証拠はありますか?そのすべてが例外ハンドラにあり、 'isinstance'が常に失敗すると実際にクラッシュすることはありません。 – zvone
@zvone:テストケースで扱われていない行を見ている間に実際に見つけました。私はこのコードがどのように実行されるのか理解できませんでした。奇妙な部分は、このコードが最初から存在しているということです。このコードはリファクタリングの結果ではありません。まあ、それは時々私たち全員に起こります。 – movermeyer