Python 使用用户取消打印检查字符串中的字符

Python 使用用户取消打印检查字符串中的字符,python,Python,当我在代码中为字符串声明变量时,它会起作用,例如: messagetoencode="readthis" encodedMsg=[] for letter in messagetoencode: encodedMsg.append(encode[letter.upper()]) print "result is ", encodedMsg 但是,当我尝试对用户输入执行相同的操作时,它不起作用: lst = list(raw_input("Please enter a messag

当我在代码中为字符串声明变量时,它会起作用,例如:

messagetoencode="readthis"

encodedMsg=[]

for letter in messagetoencode:
    encodedMsg.append(encode[letter.upper()])

print "result is ", encodedMsg
但是,当我尝试对用户输入执行相同的操作时,它不起作用:

lst = list(raw_input("Please enter a message to encode: "))

encodedMsg=[]

for letter in lst:
    encodedMsg.append(encode[letter.upper()])

print "result is ", encodedMsg
我发现了一个回溯错误,知道为什么吗

错误:

Please enter a message to encode: hello
Traceback (most recent call last):
File "Untitled 3.py", line 27, in <module>
obfuse.append(encode[letter.upper()])
KeyError: 'O'
请输入要编码的消息:hello
回溯(最近一次呼叫最后一次):
文件“Untitled 3.py”,第27行,在
obfuse.append(编码[letter.upper()])
KeyError:'O'

问题是,
O
不在
encode
字典中。如果您想分配一个默认值,而不是像这样失败,您可以使用这样的方法

obfuse.append(encode.get(letter.upper(), None))

现在,如果在
encode
中找不到任何键,则返回
None
。实际上,您可能希望在代码中包含
O
的映射。

问题在于字典中的键
O
。文本中不存在该错误,因此没有发生错误。但如果在输入中包含
o
,则会出现此错误

好的,真正的解决方案是在编码字典中有键
'O'

要处理意外输入,可以执行如下检查:

for letter in lst:
    if letter not in encode:
        raise KeyError("Sorry i don't know how to encode this letter!")
    encodedMsg.append(encode[letter.upper()])

你能把错误贴在这里吗?顺便问一下,
encode
的内容是什么?这里的
encode
是什么?实际上,我对大量的投票结果感到惊讶。我确信OP将能够显示更多信息,只花了3分钟。错误很明显,
encode
字典不包含键
'O'
。这不是问题所在。我尝试了另一个字符串,得到了这个“TypeError:'dict'对象不可调用”@user1902535-您是否碰巧使用了括号而不是方括号?换句话说,当您应该执行此操作时,您是否正在执行此
encode(letter.upper())
编码[letter.upper()]
?您的代码有很多错误。在这里发布整个代码。@iCodez-我想这就是它不起作用的原因,比如@user1902535。请向我们展示您正在使用的代码和
encode
字典。