python中的decimal.invalidooperation
我正在测试我的代码,我认为这段代码是正确的:python中的decimal.invalidooperation,python,python-2.7,invalidoperationexception,Python,Python 2.7,Invalidoperationexception,我正在测试我的代码,我认为这段代码是正确的: while True: try: p = Decimal(raw_input(...)) if ...condition... : break else: raise ValueError except ValueError: print "Error! ..." 但事实并非如此,因为当我输入“a”时,我得到的是: File "multiple.py", line 28
while True:
try:
p = Decimal(raw_input(...))
if ...condition... : break
else: raise ValueError
except ValueError:
print "Error! ..."
但事实并非如此,因为当我输入“a”时,我得到的是:
File "multiple.py", line 28, in <module>
precision = Decimal(raw_input(...))
File "/usr/lib/python2.7/decimal.py", line 548, in __new__
"Invalid literal for Decimal: %r" % value)
File "/usr/lib/python2.7/decimal.py", line 3872, in _raise_error
raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: 'a'
文件“multiple.py”,第28行,在
精度=十进制(原始输入(…)
文件“/usr/lib/python2.7/decimal.py”,第548行,新__
十进制的无效文本:%r“%value”)
文件“/usr/lib/python2.7/decimal.py”,第3872行,出现错误
提出错误(解释)
decimal.InvalidOperation:十进制的无效文字:“a”
ValueError未捕获InvalidOperation。
我不希望程序因此停止,我希望它继续请求输入,直到满足条件为止。如何操作?十进制模块中的信号异常都是的子类。您可以捕获以下任何异常来处理
无效操作
异常,从特定异常到(非常)一般异常:
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
模块引发的所有信号异常。您可以尝试捕获decimal.InvalidOperation
异常…@PM2Ring how<代码>除了十进制。无效操作?@Pigna:是的,你试过了吗?好的,成功了,谢谢!我不知道你也可以进口errors@Pigna:异常只是基于BaseException
的类。为了特定的目的,您总是可以在该层次结构中定义更多的子类。
from decimal import Decimal, DecimalException
while True:
try:
p = Decimal(raw_input(...))
if ...condition... : break
else: raise ValueError
except (ValueError, DecimalException):
print "Error! ..."