PyCharm运行正常的罗马数字转整数代码在LeetCode报KeyError如何修复?
罗马数字转整数LeetCode报错解决
问题原因
你的代码在本地运行正常,但LeetCode上报错KeyError: '"',核心问题有两个:
- 保留了本地测试代码:提交的代码包含
input('roman')、实例创建和打印语句,LeetCode的测试逻辑是直接将测试用例字符串传入romanToInt方法,不需要手动读取输入,这会导致代码错误读取到包含引号的非法内容,触发KeyError。 - 全局变量污染:
romanD和oper是全局变量,LeetCode会多次调用romanToInt方法,oper会累积之前测试的结果,导致后续计算错误。
修正后的代码
class Solution(object): def romanToInt(self, s): romanD = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000} oper = [] for j in range(len(s)): if j + 1 == len(s): break current = romanD[s[j]] next_val = romanD[s[j+1]] if current < next_val: oper.append(-current) else: oper.append(current) oper.append(romanD[s[-1]]) return sum(oper)
关键修正点
- 把
romanD和oper改为方法内部的局部变量,避免多次调用时的状态污染。 - 移除所有本地测试相关代码(
input、实例创建、打印),只保留LeetCode要求的Solution类和romanToInt方法。 - 用
s[-1]替代s[len(s)-1],简化最后一位的取值逻辑。 - 提前取出当前和下一位的数值,让代码逻辑更清晰。
内容的提问来源于stack exchange,提问作者schaggy
相关产品推荐
相关产品推荐

