Python 未捕获异常decimal.ConversionSyntax

Python 未捕获异常decimal.ConversionSyntax,python,exception,Python,Exception,这似乎是一个简单的Python问题,但它让我挠头。我希望下面的代码打印“catch[]” 它不是调用特定的exception decimal.ConversionSyntax异常处理程序,而是将通用的exception作为ex并打印出“exception[]未捕获到前面的exception子句中” 我错过了什么明显的东西吗?感谢您的见解,谢谢 import decimal amount = 'this is not a valid decimal string' try: amoun

这似乎是一个简单的Python问题,但它让我挠头。我希望下面的代码打印“catch[]”

它不是调用特定的
exception decimal.ConversionSyntax
异常处理程序,而是将通用的
exception作为ex
并打印出“exception[]未捕获到前面的exception子句中”

我错过了什么明显的东西吗?感谢您的见解,谢谢

import decimal

amount = 'this is not a valid decimal string'

try:
    amount = decimal.Decimal(amount).quantize(decimal.Decimal('.01'))
except decimal.ConversionSyntax as cex:
    print(f'Caught {cex}')
except Exception as ex:
    print(f'Exception {ex} not caught in previous except clause')

运行代码:

$ python3 /tmp/decimal-exception.py 
Exception [<class 'decimal.ConversionSyntax'>] not caught in previous except clause
$python3/tmp/decimal-exception.py
在前一个except子句中未捕获异常[]
一些诊断:

>>> try:
...   decimal.Decimal(amount)
... except Exception as e:
...   f = e
...
>>> f
InvalidOperation([<class 'decimal.ConversionSyntax'>])
>>> f.__class__
<class 'decimal.InvalidOperation'>
>>试试:
...   小数点。小数点(金额)
... 例外情况除外,如e:
...   f=e
...
>>>f
无效操作([]))
>>>f._类__

decimal.invalidooperation
是您实际上应该查找的类。尽管异常的字符串表示提到了
decimal.ConversionSyntax
,并且它确实是
decimal.invalidooperation
的子类,基类还是被提升了。

它似乎抛出了一个
decimal.invalidooperation
,不是直接的
decimal.ConversionSyntax
.Perfect响应——非常感谢您深入了解异常如何返回其字符串表示形式。捕获
invalidooperation
异常是我想要的。再次感谢!