gpt4 book ai didi

python - 为 os.environ 引发 EnvironmentError 是否合适?

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:16 27 4
gpt4 key购买 nike

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 文档说 EnvironmentErrorOSError 的基类,基类异常“...仅用作其他异常的基类”。在 Python 3.6 文档中,EnvironmentError is listed among concrete exceptions ,但没有关于错误类本身的任何文档。问题:

  1. 在这种情况下使用 EnvironmentError 是否合适?我应该使用其他一些内置错误,还是自定义错误?
  2. EnvironmentError 是 Python 3.6 中的基本错误类吗?
  3. 为什么会引发 OSError 而不是 EnvironmentError

最佳答案

我对“EnvironmentError”是什么感到有点困惑。它与环境变量无关。 exception EnvironmentError 的原始含义(在 Python 2 中)是:

The base class for exceptions that can occur outside the Python system: IOError, OSError.

PEP 3151 , IO 和 OS 异常针对 Python 3.3 进行了重新处理,因此它们都使用 OSError作为基类。 EnvironmentVariable 保留为 OSError 的别名以实现向后兼容性。


对于与环境变量相关的异常,一些适当的建议可能是:

  • > RuntimeError - 这是一个有点“杂项”的异常类型,但如果本地运行环境没有变量集,它可能是合适的。
  • > ValueError - 环境变量已设置,但其值存在异常。

关于python - 为 os.environ 引发 EnvironmentError 是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50869968/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com