断言没有Python中的回溯

Mar*_* II 2 python logic assert

我正在尝试简化以下内容:

if x < 0:
  print('we don't do negative numbers')
else: 
  NORMAL CODE HERE
Run Code Online (Sandbox Code Playgroud)

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

assert x > 0, 'errorText'
NORMAL CODE HERE
Run Code Online (Sandbox Code Playgroud)

不过,我不希望错误给予追溯.我只想要像if/else那样的单行.

有没有办法让assertionError像异常那样返回单行,或者我是否真的需要继续运行if/else的处处?

Noa*_*oah 6

assertPython中的语句用于调试或测试.当条件不是时,它用于停止执行程序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
Run Code Online (Sandbox Code Playgroud)

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

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