このコードを使用すると、多くのキーが出力されますが、出力は期待できませんでした。
import os
for i in os.environ:
print i
これはos.pyからのコードです:
try:
environ
except NameError:
environ = {}
os.environはどこから値を取得しますか?どこで初期化されますか?
このコードを使用すると、多くのキーが出力されますが、出力は期待できませんでした。
import os
for i in os.environ:
print i
これはos.pyからのコードです:
try:
environ
except NameError:
environ = {}
os.environはどこから値を取得しますか?どこで初期化されますか?
os
モジュールは、プラットフォーム固有のサブモジュール(_nt
またはなど)からすべての名前をインポートすることから始め、次に_posix
少し正規化を行います。明らかに、environ
名前(システム環境を表す)はプラットフォーム固有のサブモジュールによって定義されたため(通常は期待されているように!!!)、の句except
はos.py
トリガーされずos.environ
、通常は豊富な辞書にすぎません。
から引用されos.py
たコードはバックストップです。つまり、まだ誰も変数を定義していない場合はenviron
、値として空の辞書を使用して変数を作成します。
しかしenviron
、58行目でこれによってさらに上にインポートされているため、存在します。
from nt import *
Windowsを実行している場合、および他のプラットフォーム用の同様のプラットフォーム固有のインポート。したがって、実際environ
には常に存在し、空のdictバックストップが使用されることはありません。
Why bother provide a backstop then? Well, it's of dubious usefulness in the real world since as far as I can see all the platforms currently supported by the core Python distribution do implement a proper environ
lookup. However there may be, or have been, unusual platforms where Python runs that do not have environment variables, and it may be of use when developing a new platform not to have a lot of programs fail to run when system interfaces like environment variables are not written yet.