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位的数字时收到。
答案 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