当给os.environ
一个未设置的环境变量的名称时,它会抛出一个KeyError
:
In [1]: my_value = os.environ['SOME_VALUE']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-6-0573debe183e> in <module>()
----> 1 my_value = os.environ['SOME_VALUE']
~/blah/ve/lib/python3.6/os.py in __getitem__(self, key)
667 except KeyError:
668 # raise KeyError with the original key value
--> 669 raise KeyError(key) from None
670 return self.decodevalue(value)
671
KeyError: 'SOME_VALUE'
我得到了
KeyError
的提高,因为os.environ
就像一个字典,但是在需要设置SOME_VALUE
的应用程序中,当用户忽略设置它时,我想引发一个更多信息性的错误。一种选择是使用更多信息生成EnvironmentError
:try:
my_value = os.environ['SOME_VALUE']
except KeyError:
raise EnvironmentError('SOME_VALUE environment variable needs to be set to import this module') from KeyError
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
KeyError:
The above exception was the direct cause of the following exception:
OSError Traceback (most recent call last)
<ipython-input-10-406772b14ea9> in <module>()
2 my_value = os.environ['SOME_VALUE']
3 except KeyError:
----> 4 raise EnvironmentError('SOME_VALUE environment variable not set') from KeyError
OSError: SOME_VALUE environment variable not set
我感到奇怪的是,这引发了一个
OSError
。 Python 2.7文档说EnvironmentError
是OSError
的基类,并且基异常“...仅用作其他异常的基类”。在Python 3.6文档 EnvironmentError
is listed among concrete exceptions中,但没有有关错误类本身的任何文档。问题:EnvironmentError
甚至合适吗?我应该使用其他内置错误还是自定义错误? EnvironmentError
是Python 3.6中的基本错误类吗? OSError
而不是EnvironmentError
? 最佳答案
你为什么不只用
my_value = os.getenv("SOME_VALUE")
如果不存在,它将仅返回None。而且,如果您愿意,可以抛出自己的错误。