typing.assert_never()是否被命令行选项-O删除,类似于assert语句?

问题描述 投票:0回答:2

在 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)

是否保证默认分支即使在优化模式下也能工作?

python python-typing
2个回答
0
投票

不。

assert_never()
只是一个普通函数
raise
语句
组成。与其他打字功能一样,它不会在运行时被删除。


0
投票

打字.assert_never()会发生这种情况吗?

不,

assert_never
不受优化模式影响。这是因为
assert_never
不是
assert
陈述。相反,它是来自
typing
模块的运行时函数,无论优化如何,在调用时始终运行。

是否保证默认分支即使在优化模式下也能工作?

是的,即使 Python 在优化模式下运行,

default branch
仍将按预期运行。这是因为在这种情况下使用
assert_never
是函数调用,而不是
assert
语句。

希望这对你有一点帮助。

© www.soinside.com 2019 - 2024. All rights reserved.