python:使用断言引发不同的错误类型

ewo*_*wok 6 python assert exception

使用assert,您可以轻松测试条件而无需if/raise

assert condition, msg
Run Code Online (Sandbox Code Playgroud)

是相同的

if not condition:
  raise AssertionError(msg)
Run Code Online (Sandbox Code Playgroud)

我的问题是是否可以使用assert来引发不同类型的Errors. 例如,如果您缺少一个特定的环境变量,返回一个EnvironmentError. 这可以像以前一样使用 atry/catch或类似工具手动完成if/raise

if not variable in os.environ:
  raise EnvironmentError("%s is missing!" % variable)
Run Code Online (Sandbox Code Playgroud)

或者

try:
  assert variable in os.environ
except:
  raise EnvironmentError("%s is missing!" % variable)
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否有某种类型的快捷方式我无法找到,或者是否有一些解决方法可以except在堆栈中放置多个s。

900*_*000 5

内置assert是一个调试功能,它的用途很窄,如果运行python -O.

如果您想根据单行表达式的条件引发各种异常,请编写一个函数!

assert_env(variable in os.environ)
Run Code Online (Sandbox Code Playgroud)

甚至

assert_env_var(variable)  # knows what to check
Run Code Online (Sandbox Code Playgroud)

如果您想要超通用/简并的情况,请考虑一个接受所有内容作为参数的函数(可能带有一些默认值):

my_assert(foo == bar, FooException, 'foo was not equal to bar')
Run Code Online (Sandbox Code Playgroud)