断言错误,不应该有错误

时间:2016-01-22 18:46:23

标签: python python-3.x assertion

try:
    guess = str(int(input("Please enter your guess: ")))
    assert len(guess) == 4
except ValueError or AssertionError:
    print("Please enter a 4 digit number as your guess not a word or a different digit number. ")

断言错误当我输入一个不是4位的数字时收到。

2 个答案:

答案 0 :(得分:2)

让我们分析一下代码结构。我添加了括号来表示Python 口译小组的陈述。

try:
    do_something()
except (ValueError or AssertionError):
    handle_error()

让我们检查一下catch的定义会发生什么变化。引用official docs

  

表达式x or y首先评估x;如果x为真,则返回其值;否则,将评估y并返回结果值。

“如果x为真”实际上在布尔上下文中引用x为真(Python 2中x. __nonzero__ ()的值为{{ Python中的1}} __bool__ x.。除非另有说明,否则所有对象(包括类)都是隐式的。

()

在考虑了类的布尔上下文和有关布尔运算的引用文档之后,我们可以安全地假设# No exception is raised in either case assert ValueError assert AssertionError # both values after conversion are True assert bool(ValueError) is True assert bool(AssertionError) is True 的计算结果为(ValueError or AssertionError)

要捕获多个异常,您需要将它们放在元组中:

ValueError

答案 1 :(得分:1)

except ValueError or AssertionError:应为except (ValueError, AssertionError):

执行or时,您没有发现异常AssertionError