python assert断言和__debug__

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

assert  test  [, msg]

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

def write_data(file, data):
    assert file, 'write_data: file not defined'
    pass

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

例如,如果计划把上面的函数 write_data()交付给最终用户使用,应该使用传统的if语句和相应的错误处理代码替换assert语句。
除了assert语句外,python还提供内置的只读变量__debug__,除非解释器运行在最优模式中(通过使用-o选项指定),否则它的值为True。在运行额外的错误检查过程时,程序可以在需要时检查这个变量。__debug__,变量的底层实现在解释器中经过优化,因此实际上没有包含if语句的额外控制流逻辑。如果python运行在普通模式中,if __debug__ 语句下以及所有相关语句本身的程序中。最优模式中,if __debug__ 语句以及所有相关语句都将从程序中完全删除。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值