这是为了发展而不是为了生产吗?

时间:2019-07-11 13:56:52

标签: python python-3.x

我试图理解它是什么。每个答案都说这是调试的东西。我很困惑我们不应该在生产中使用它吗?显影后是否应将其移除?如果在Python解释器中禁用了断言。断言将被忽略,这会成为安全隐患吗?我们只是用它来简化开发调试?

(如果用于生产)。在下面的示例中,我使用assert来控制不具有负值。为什么我不使用其他方式断言呢?

谢谢。

def get_age(age):
   assert age > 0, "Age can't be negative!"
   print("your age is"+age)

2 个答案:

答案 0 :(得分:2)

如果没有其他问题,您将使用断言失去对get_age行为的控制,因为可以在运行时将其禁用而无需修改代码本身。对于生产用途,请更加明确,并提出一个ValueError(或者,如果您认为值得的话,请添加ValueError的自定义子类):

def get_age(age):
   if age <= 0:
       raise ValueError("Age can't be nonpositive!")
   print("your age is" + str(age))

答案 1 :(得分:0)

在以下情况下使用声明语句:

  • 最终代码在理论上是安全的
  • 代码的当前状态尚未失效保护

例如您用移动的汽车对游戏进行编程。假设您有一个非常复杂的move()函数,对于positive input来说绝对可以正常工作,但在特殊情况下,对于negative input来说,它的运行方式很怪异。

您知道此功能在游戏的最后阶段会很好,因为游戏的任何功能部分均不会每次输入move()时输入为负。

但是由于您目前仍在从事人工智能工作驾驶汽车以便您可以与机器人竞赛-您不能保证您没有犯错误以及AI。用负输入调用move()函数。

因此,您将assert input_arg >= 0放在函数move()的开头,以便每次输入错误的参数arg时都会收到通知。 try-except不会抓住这一点,因为您的动作只会出错,但不会引发异常。

因此assert input_arg >= 0, 'input_arg must be positive!'只是if not (input_arg >= 0): raise ValueError('input_arg must be positive!')的简写,同时表示这不是在代码的最后阶段可能发生的实际错误,而只是在开发游戏的其他部分时发生的。

它更短,可以与“实际”错误区分开,因此也可以自动剥离以生产代码。