Python中使用用户输入作为字典键触发KeyError的原因分析
问题原因与解决方案
这问题我太熟了!核心就是数据类型不匹配导致的,容我给你掰扯清楚:
为什么会触发KeyError?
你代码里的input()函数有个容易被忽略的特性:它返回的永远是字符串类型。比如你输入数字1,num实际拿到的是字符串"1",而不是整数1。
再看你构建字典etextDict的逻辑:
for book in bookList: etextDict[x] = book x -= 1
这里的x是整数(从len(bookList)开始递减的整数),所以字典的键全是整数类型。当你用字符串"1"去访问字典时,字典里根本没有这个键,自然就抛出KeyError了。
而你直接赋值num=1的时候,这个num是整数类型,和字典里的键完全匹配,所以能正常输出内容。
怎么解决?
最简单的办法就是把用户输入的字符串转换成整数,用int()函数就行:
num = int(input('Search by ETEXT NO:')) print(etextDict[num])
如果想让程序更健壮,避免用户输入非数字导致崩溃,可以加个异常处理:
try: num = int(input('Search by ETEXT NO:')) print(etextDict[num]) except ValueError: print("请输入有效的数字编号哦!") except KeyError: print("这个编号对应的书籍不存在~")
额外提醒
Python是强类型语言,字典的键对类型非常敏感——整数1和字符串"1"在字典里是完全不同的两个键。处理用户输入时一定要记住:input()返回的都是字符串,需要根据实际场景转换类型。
内容的提问来源于stack exchange,提问作者Safin Mahmud
相关产品推荐
相关产品推荐

