PYTHON:处理 KeyError
Posted
技术标签:
【中文标题】PYTHON:处理 KeyError【英文标题】:PYTHON: Handling the KeyError 【发布时间】:2020-12-23 14:49:56 【问题描述】:我试图在 Python 中解决一个问题(检查字符串 s
和 t
是否为字谜):
算法:
要检查t
是否是s
的重新排列,我们可以计算两个字符串中每个字母的出现次数并进行比较。由于s
和t
都只包含来自a-z
的字母,所以一个大小为26 的简单计数器table
就足够了。
我们可以为s
中的每个字母递增计数器,并为t
中的每个字母递减计数器,然后检查计数器是否回到零。
代码:
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
if len(s) != len(t):
return False
table =
for i in range(len(s)):
table[s[i]] = table.get(table[s[i]], 0) + 1
for i in range(len(t)):
table[t[i]] = table.get(table[s[i]], 0) - 1
if table[t[i]] < 0:
return False
return True
然而,我在第一个循环中得到一个 KeyError。为了解决这个问题,我尝试使用.get()
,但仍然无法解决。
我收到以下错误:
【问题讨论】:
您需要准确地告诉我们您遇到了什么错误。什么是回溯? 另外,table
是什么?请edit 包含minimal reproducible example
table[s[i]] = table.get(table[s[i]], ...)
您正在尝试访问table
中的密钥,您正在那里进行设置,而table
无论如何此时都是空的……
table[s[i]] = table.get(s[i], 0) + 1
?
@deadshot 是的,谢谢。这修复了错误。但是,代码似乎没有正确解决问题:)
【参考方案1】:
在dict
中查找值时,您查找了两次:table.get(table[s[i]], 0)
。
[]
和 .get()
是同义词,除了后者空时安全并返回默认值。
这应该是您需要的循环。感谢@deadshot。
for i in range(len(s)):
table[s[i]] = table.get(s[i], 0) + 1
for i in range(len(t)):
table[t[i]] = table.get(t[i], 0) - 1
if table[t[i]] < 0:
return False
【讨论】:
谢谢。此外,return False if len(s) != len(t) else sorted(s) == sorter(t)
有效。我只是想修复上述代码:)
知道了。是的,我看到 dict 查找有@deadshot 提到的问题。以上是关于PYTHON:处理 KeyError的主要内容,如果未能解决你的问题,请参考以下文章
Python 图像处理 OpenCV :图像平滑(滤波)处理