2015-12-31 6 views
0

Я проверял мой код, и я подумал, что этот кусок кода был правильным:decimal.InvalidOperation в питона

while True: 
    try: 
     p = Decimal(raw_input(...)) 
     if ...condition... : break 
     else: raise ValueError 
    except ValueError: 
     print "Error! ..." 

, но это не так, так как, когда я вход «а», это то, что я получаю:

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' 

ValueError не улавливает InvalidOperation. Я не хочу, чтобы программа остановилась из-за этого, я хочу, чтобы он продолжал просить ввода, пока он не удовлетворяет условию. Как мне это сделать?

+3

Вы _could_ попытаетесь поймать исключение 'decimal.InvalidOperation' ... –

+0

@ PM2Ring как? 'except decimal.InvalidOperation'? – Pigna

+0

@Pigna: Да, вы еще это пробовали? –

ответ

6

Исключения в модуле 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 модуля.

 Смежные вопросы

  • Нет связанных вопросов^_^