Tom*_*mMP 11 python exception python-3.x
标题几乎已经总结了它。
我有一段代码可以调用os.getenv获取 URL 和令牌以连接到服务。代码存在于一个模块中,只能从那里导入,即它不是脚本。
这根本不是什么大问题,因为我真的只需要崩溃并显示消息说存在未设置的值,但这让我开始思考哪些 Python 内置异常最适合。
我找到了EnvironmentError, 但它似乎作为基类IOError和其他与操作系统相关的异常继承的基类。
它会像 a 一样简单ValueError,因为它真的只是一个缺失的值吗?
谢谢!
Kat*_*ops 11
您可以通过继承来为特定情况创建自己的例外Exception
class MissingEnvironmentVariable(Exception):
pass
def get_my_env_var(var_name):
try:
return os.environ[var_name]
except KeyError:
raise MissingEnvironmentVariable(f"{var_name} does not exist")
Run Code Online (Sandbox Code Playgroud)
大多数内置的具体异常类都是针对特定用例的,而这个异常类并不真正适合除RuntimeError. 但我建议您使用自定义异常子类。
您始终可以创建自定义异常
https://www.programiz.com/python-programming/user-define-exception https://docs.python.org/3/tutorial/errors.html
我之前使用过这个指南:
简单的事情就像
class UnconfiguredEnvironment(Exception):
"""base class for new exception"""
pass
if not os.environ.get("URL",None):
raise UnconfiguredEnvironment
Run Code Online (Sandbox Code Playgroud)
使用指南根据您的需要进行扩展。
默认情况下,KeyError当环境变量不存在时已引发。os.environ["THISENVDOESNTEXIST"]
此外,如果 env 变量不存在,您可以提供一个默认变量。这样做不会引发错误。os.environ.get("THISENVDOESNTEXIST", "defaultvalue")
执行的代码:
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ["THISENVDOESNTEXIST"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Tin\AppData\Local\Programs\Python\Python37\lib\os.py", line 678, in __getitem__
raise KeyError(key) from None
KeyError: 'THISENVDOESNTEXIST'
>>> os.environ.get("THISENVDOESNTEXIST", "defaultvalue")
'defaultvalue'
Run Code Online (Sandbox Code Playgroud)
如果你想提出自己的自定义错误,你可以这样做:
class MyException(Exception):
pass
try:
os.environ["THISENVDOESNTEXIST"]
except KeyError as e:
raise MyException("Tried accessing an environment variable that does not exist")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4218 次 |
| 最近记录: |