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

如何实现用户输入匹配字典键?Python代码执行异常求助

问题分析与修复方案

核心问题

你的代码有两处关键错误导致所有输入都进入else分支:

  1. 条件判断逻辑错误:if x is key in all_techs.keys() 写法混乱,key是for循环结束后残留的最后一个键值,且is用于判断对象身份而非值相等,完全偏离了"检查输入是否在字典键中"的需求。
  2. 递归调用语法错误:print('Invalid selection \n') + find_tech() 中print()返回None,与函数调用相加会触发类型错误,同时递归的写法也不符合逻辑。

修复后的代码

def find_tech():
    t2techs = {'FirstName1': 'LastName1', 'FirstName2': 'LastName2'}

    t1techs = {
        'FirstName3': 'LastName3',
        'FirstName4': 'LastName4',
        'FirstName5': 'LastName5',
        'FirstName6': 'LastName6',
        'FirstName7': 'LastName7',
        'FirstName8': 'LastName8'
    }
    all_techs = t2techs.copy()
    all_techs.update(t1techs)
    
    print('Who was your support tech today? \n')
    for key, value in all_techs.items():
        print(key)

    x = input('\nTech: ')
    # 直接检查输入是否在字典的键集合中
    if x in all_techs:
        print('Thanks.\n')
    else:
        print('Invalid selection \n')
        # 正确递归调用,无需拼接print返回值
        find_tech()

find_tech()

关键修复说明

  • 有效判断输入:用x in all_techs直接检查输入是否存在于字典的键中,无需调用.keys(),字典默认迭代对象就是键,写法更简洁高效。
  • 避免is误用:is用于判断两个对象是否为同一内存地址,字符串比较值相等应该用==,但这里直接用in是最贴合需求的写法。
  • 修正递归调用:移除print()和find_tech()之间的+,单独调用递归函数,避免类型错误的同时保证逻辑正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:10:49