You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python捕获decimal.InvalidOperation异常失败问题咨询

问题分析与解决

你遇到的问题核心是异常类的引用方式错误,导致原本应该被捕获的异常没被正确处理,反而触发了新的错误。

错误原因

你使用了from decimal import *导入模块内容,但在except块里却试图通过decimal.InvalidOperation来引用异常类——实际上,from decimal import *只会把模块里的成员(比如Decimal、InvalidOperation)导入到当前命名空间,并不会导入decimal这个模块名本身。所以当Python执行到except decimal.InvalidOperation时,会先抛出NameError: name 'decimal' is not defined,这就是你看到“在处理异常期间出现另一个异常”的原因。

修正后的代码

有两种可行的修正方式:

方式1:直接使用导入的异常类

既然已经用from decimal import *导入了所有成员,直接写InvalidOperation即可:

from decimal import *
entry = input("GRD Conversion: ")
try:
    grd_usd = Decimal(entry)
except InvalidOperation:
    print("Invalid: ", entry)

方式2:明确导入需要的成员(更推荐)

避免import *带来的命名污染,明确导入Decimal和InvalidOperation:

from decimal import Decimal, InvalidOperation
entry = input("GRD Conversion: ")
try:
    grd_usd = Decimal(entry)
except InvalidOperation:
    print("Invalid: ", entry)

运行修正后的代码,输入3d时就会得到预期的输出:Invalid: 3d。

内容的提问来源于stack exchange,提问作者OrigamiEye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:55:54