我正在测试我的代码,我认为这段代码是正确的:
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("admin").roles("ADMIN");
}
但事实并非如此,因为当我输入“a”时,这就是我得到的:
while True:
try:
p = Decimal(raw_input(...))
if ...condition... : break
else: raise ValueError
except ValueError:
print "Error! ..."
ValueError不会捕获InvalidOperation。 我不希望程序停止因为这个,我希望它一直要求输入,直到它满足条件。我该怎么做?
答案 0 :(得分:12)
decimal
模块中的信号异常都是decimal.DecimalException
exception class的子类。您可以捕获以下任何异常来处理InvalidOperation
异常,从特定到(非常)泛型:
decimal.InvalidOperation
decimal.DecimalException
ArithmeticError
Exception
BaseException
ValueError
不在该层次结构中,但捕获Exception
也会捕获ValueError
,因为它是一个子类。一般来说,您很少想要捕获BaseException
,因为它会捕获所有可能的异常,包括SystemExit
和MemoryError
。
您可以在同一个处理程序中捕获多个异常:
from decimal import Decimal, DecimalException
while True:
try:
p = Decimal(raw_input(...))
if ...condition... : break
else: raise ValueError
except (ValueError, DecimalException):
print "Error! ..."
会捕获原始ValueError
例外以及decimal
模块引发的所有信号异常。