在 Python 中,如果传递了命令行优化选项或,assert
语句不会生成代码。这种情况会发生吗?声明不会被优化的运行时断言是否安全?-O
-OO
typing.assert_never()
考虑一下这个案例
from typing import assert_never
def func(item: int | str):
match item:
case int():
...
case str():
...
case _:
assert_never(item)
是否保证默认分支即使在优化模式下也能正常工作?
不。至少在 CPython 中,
assert_never()
它只是一个由语句组成的普通函数。 与其他类型功能一样,它不会在运行时被删除。raise
需要强调的是,它
assert_never()
没有什么特殊之处:它只是一个接受类型参数Never
并且从不返回任何东西的函数(即,它引发):它被纳入 stdlib 只是因为人们期望它会被广泛使用。引用打字指南:
同一节还说: