如何实现用户输入匹配字典键?Python代码执行异常求助
问题分析与修复方案
核心问题
你的代码有两处关键错误导致所有输入都进入else分支:
- 条件判断逻辑错误:
if x is key in all_techs.keys()写法混乱,key是for循环结束后残留的最后一个键值,且is用于判断对象身份而非值相等,完全偏离了"检查输入是否在字典键中"的需求。 - 递归调用语法错误:
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
相关产品推荐
相关产品推荐

