【问题标题】:Assert without the traceback in Python在 Python 中断言没有回溯
【发布时间】:2015-12-12 22:16:23
【问题描述】:

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

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's 无处不在吗?

【问题讨论】:

  • 如果你不想回溯,你可能在滥用assert。查看手册了解其实际用法。
  • 如果 x 是运行时变体,不要 assert 而是 raise 域特定异常。

标签: python logic assert


【解决方案1】:

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

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

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

如果此时 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

【讨论】:

  • 这正是我所需要的。 “如果条件:返回”基本上是我希望对断言做的事情。感谢您启发我了解断言的实际用途。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 2017-08-29
  • 1970-01-01
  • 2019-02-11
  • 2010-11-14
  • 2014-05-07
相关资源
最近更新 更多