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

Python实现手机号数字转单词 运行报KeyError:'9'如何解决

问题说明

运行手机号转对应英文单词的Python代码时,抛出KeyError: '9'错误,原代码如下:

phone = input("Phone: ")
if len(phone) < 10:
    print("Phone number should be at least 10 digit long!")
else:
    li = []
    for item in range(0, 10, 1):
        li.append(phone[item])
print(li)
word_num = {
     0: "Zero",
     1: "One",
     2: "Two",
     3: "Three",
     4: "Four",
     5: "Five",
     6: "Six",
     7: "Seven",
     8: "Eight",
     9: "Nine"
}
for item in li:
    print(word_num[int(item)])
错误原因
  • 作用域逻辑bug:存储手机号位的列表li定义在else分支内,当输入手机号长度不足10位时,li不会被初始化,后续执行打印、遍历li的逻辑会直接报错。如果是在交互式环境下连续运行代码,li会残留上次运行的异常值,很容易触发类型不匹配的键错误。
  • 键类型不匹配(触发KeyError的核心原因):word_num字典的键是整数类型的0-9,如果你实际运行的代码中遍历查找时漏写了int()转换,直接传入从字符串截取的字符(比如字符串'9'),字典里不存在字符串类型的键,就会抛出KeyError: '9'。
  • 缺少输入内容校验:当前代码只校验了输入长度,没有判断输入是否全为数字,一旦用户输入非数字字符,转换整数时也会报错。
修复方案

调整代码结构,把所有转换逻辑收拢到合法输入分支内,补全校验规则,明确键的类型匹配,修复后代码如下:

phone = input("Phone: ").strip()
# 统一做输入合法性校验
if len(phone) < 10 or not phone.isdigit():
    print("Invalid input: phone number should be at least 10 digits and contain only numbers!")
else:
    word_num = {
        0: "Zero",
        1: "One",
        2: "Two",
        3: "Three",
        4: "Four",
        5: "Five",
        6: "Six",
        7: "Seven",
        8: "Eight",
        9: "Nine"
    }
    output = []
    # 遍历手机号每一位,明确转整数后查字典
    for ch in phone:
        output.append(word_num[int(ch)])
    print(' '.join(output))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:21:07