未捕获异常decimal.ConversionSyntax

2024-09-19 20:33:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

它不是调用特定的except decimal.ConversionSyntax异常处理程序,而是使用泛型except Exception as ex并打印出“exception[<;class'decimal.ConversionSyntax'>;]未在前面的except子句中捕获”

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

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

Tags: 代码ltgtasexceptionnotamountclass
1条回答
网友
1楼 · 发布于 2024-09-19 20:33:44

一些诊断:

>>> try:
...   decimal.Decimal(amount)
... except Exception as e:
...   f = e
...
>>> f
InvalidOperation([<class 'decimal.ConversionSyntax'>])
>>> f.__class__
<class 'decimal.InvalidOperation'>

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

相关问题 更多 >