python断言(assert) 与 __debug__

assert语句可以在程序中引入调试代码。assert的一般格式如下:

assert test [, msg]

其中test是一个表达式,其值应该为True或者False。如果test值为False,assert就会抛出AssertionError异常,并使用在assert中提供的可选信息msg,例如:

def func(file, data):

    assert file, "write_data,: file not defined!"

assert语句不应用于必须执行以确保程序正确的代码,因为如果python运行在最优模式中(通过对解释器使用-O选项进入该模式),它将不会执行。特别是不能用assert语句检查用户输入。相反,assert语句用于检查应该始终为真的内容;如果assert引发异常,这意味着程序中存在bug,而不是用户出现了错误。

例如,如果计划把前面的内容func()交付给最终用户使用,应该使用传统的if语句和相应的错误处理代码替换assert语句。

除了assert语句之外,python还提供内置的只读变量 __debug__, 除非解释器运行在最优模式中(通过使用-O选项指定),否则它的值为True。在运行额外的错误检查过程时,程序可能在需要时检查这个变量。__debug__变量的底层实现在解释器中经过了优化,因为实际上没有包含if语句本身的额外控制流逻辑。如果python运行在普通模式中,if __debug__语句下的语句就会内联到没有if语句本身的程序中。在最模式中,if __debug__ 语句以及所有相关语句都将从程序中完全删除。

使用 assert 和 __debug__ 语句可以对程序进行高效的双模式开发。例如在调试模式中,可以随意地在代码中加入断言和调试检查,以便验证操作正确与否。在最优模式中,将省略所有这些额外的检查,以免造成额外的性能负担。

你可能感兴趣的:(python断言(assert) 与 __debug__)