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

字典无对应键值时抛自定义异常,except块未触发问题排查

问题分析与解决方案

你的代码里except块未触发的核心原因是:data.get(key, NoElementError)并没有抛出自定义异常,只是把NoElementError这个类对象作为键不存在时的返回值。Python的except块只会捕获主动抛出的异常实例,不会捕获返回的类对象。

另外,你的自定义异常类实现也有问题:直接在__init__里打印信息,没有通过父类Exception的构造方法设置异常消息,导致即使抛出异常,也无法通过print("Error", e)正确输出错误信息。

修正方案1:直接访问字典键(推荐)

当使用data[key]访问不存在的键时,Python会自动抛出KeyError,我们可以捕获这个错误后,主动抛出自定义异常:

class NoElementError(Exception):
    def __init__(self):
        # 调用父类构造方法传入错误消息,让异常实例携带信息
        super().__init__("No element for this key")

data = { 1 : "vishnu" ,
         2 : "Murshid" ,
         3 : "vaseem" ,
         4 : "abdu" , 
         5 : "farooq" }

key = int(input("Enter key"))
try:
    # 直接访问键,不存在时触发KeyError
    value = data[key]
    print("Found value:", value)
except KeyError:
    # 捕获KeyError后,抛出自定义异常
    raise NoElementError()

修正方案2:使用get()判断后抛异常

如果坚持用data.get(),需要判断返回值,主动抛出异常:

class NoElementError(Exception):
    def __init__(self):
        super().__init__("No element for this key")

data = { 1 : "vishnu" ,
         2 : "Murshid" ,
         3 : "vaseem" ,
         4 : "abdu" , 
         5 : "farooq" }

key = int(input("Enter key"))
try:
    value = data.get(key)
    if value is None:
        # 键不存在时,主动抛出自定义异常
        raise NoElementError()
    print("Found value:", value)
except NoElementError as e:
    print("Error:", e)

注意事项

  • 自定义异常必须通过raise语句主动抛出,才能被except块捕获。
  • 自定义异常类应该调用父类Exception的__init__方法传入错误消息,这样异常实例才能携带可打印的错误信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:21:24