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
相关产品推荐
相关产品推荐

