断言没有Python中的回溯

时间:2015-12-12 22:16:23

标签: python logic assert

我试图简化以下内容:

if x < 0:
  print('we don't do negative numbers')
else: 
  NORMAL CODE HERE

我最近了解了assert命令,并且钦佩它将以前的行简化为:

assert x > 0, 'errorText'
NORMAL CODE HERE
但是,我并不想要错误来追溯。我只想要像if / else一样的单行。

有没有办法让assertionError像异常一样返回单行,或者我是否真的需要继续运行if / else&#39;

1 个答案:

答案 0 :(得分:6)

Python中的assert语句用于调试或测试。当条件不是True时,它用于停止程序的执行。调试时,您可以在代码中包含这些语句,以帮助跟踪错误。一旦修复了bug,就删除它们。在生产代码中使用assert是一个坏主意。

如果您使用assert编写,如果x小于零,则程序将终止,并且后面的代码将不会运行。

您应该继续使用if / else方法来提供两个所需的代码路径。记录x小于零的一条路径,另一条路径执行块常规代码中的代码。

如果x此时永远不应该小于0,并且不能执行剩余的代码,那么你应该引发一个可以在调用代码中捕获的异常。

def method_using_positive_numbers(x):
    if x < 0:
        raise ValueError("we don't do negative numbers")
    NORMAL CODE HERE

另一个选择是如果条件不为真,则从方法返回。

def method_using_positive_numbers(x):
    if x < 0:
        print("we don't do negative numbers")
        return
    NORMAL CODE HERE