调用rearrange_name函数处理name变量时遭遇NoneType错误
解决NoneType错误问题
你的代码触发NoneType错误的核心原因是正则表达式匹配失败:
你写的正则r'^([\w.]*),([\w.]*)$'要求输入必须是[内容],[内容]的格式(比如Ada, Lovely),但你传入的参数是'Lovely Ada'——没有逗号,导致re.search找不到匹配项,返回None。之后你直接访问result[2],自然就会抛出"无法访问None的索引"的错误。
下面是两种针对性的修复方案:
方案1:适配空格分隔的姓名格式
如果你的输入是名 姓这种空格分隔的形式,修改正则表达式并增加匹配校验:
import re def rearrange_name(name): # 匹配"名 姓"格式,\s+匹配一个或多个空格 result = re.search(r'^([\w.]+)\s+([\w.]+)$', name) if result: # 先确认匹配成功再处理 return '{} {}'.format(result[2], result[1]) return name # 匹配失败时返回原输入,避免报错 print(rearrange_name('Lovely Ada')) # 输出:Ada Lovely
方案2:兼容逗号分隔的原始需求
如果你的目标是处理姓, 名这种带逗号的格式,需要确保传入正确参数,同时增加错误处理逻辑:
import re def rearrange_name(name): # 匹配"姓, 名"格式,\s*兼容逗号后有无空格的情况 result = re.search(r'^([\w.]+),\s*([\w.]+)$', name) if result: return '{} {}'.format(result[2], result[1]) # 匹配失败时返回提示,便于排查问题 return f"输入格式错误,请使用'姓, 名'格式,当前输入:{name}" # 正确调用示例 print(rearrange_name('Ada, Lovely')) # 输出:Lovely Ada # 错误输入的处理 print(rearrange_name('Lovely Ada')) # 输出格式错误提示
关键修改说明
- 将正则里的
*替换为+:避免匹配空字符串(比如输入只有逗号的无效情况) - 增加
if result:判断:确保只有匹配成功时才访问分组,从根源避免NoneType错误 - 优化正则的分隔符匹配:方案1用
\s+适配姓名间的空格,方案2用\s*兼容逗号后的空格,提升兼容性
内容的提问来源于stack exchange,提问作者reminiscence
相关产品推荐
相关产品推荐

