Assertion Error,不应该出现时的错误
Assertion Error, error when there shouldn't be one
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 位数字时收到断言错误。
except ValueError or AssertionError:
应该是 except (ValueError, AssertionError):
当您执行 or
时,您没有捕捉到异常 AssertionError
我们来分析一下代码结构。我添加了括号来表示 Python
解释器组语句。
try:
do_something()
except (ValueError or AssertionError):
handle_error()
让我们检查一下捕获异常的定义发生了什么。引用 official docs:
The expression x or y
first evaluates x
; if x
is true, its value is returned; otherwise, y
is evaluated and the resulting value is returned.
"If x
is true" 实际上是指 x
在布尔上下文中为真(x.
__nonzero__
()
in Python 2, x.
__bool__
()
在 Python 3 中的值)。除非以其他方式实现,否则所有对象(包括 类)都是隐式真实的。
# 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
。
要捕获多个异常,您需要将它们放在元组中:
try:
do_something()
except (ValueError, AssertionError):
handle_error()
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 位数字时收到断言错误。
except ValueError or AssertionError:
应该是 except (ValueError, AssertionError):
当您执行 or
时,您没有捕捉到异常 AssertionError
我们来分析一下代码结构。我添加了括号来表示 Python 解释器组语句。
try:
do_something()
except (ValueError or AssertionError):
handle_error()
让我们检查一下捕获异常的定义发生了什么。引用 official docs:
The expression
x or y
first evaluatesx
; ifx
is true, its value is returned; otherwise,y
is evaluated and the resulting value is returned.
"If x
is true" 实际上是指 x
在布尔上下文中为真(x.
__nonzero__
()
in Python 2, x.
__bool__
()
在 Python 3 中的值)。除非以其他方式实现,否则所有对象(包括 类)都是隐式真实的。
# 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
。
要捕获多个异常,您需要将它们放在元组中:
try:
do_something()
except (ValueError, AssertionError):
handle_error()