Can';除了在Python中工作之外,我无法尝试

Can';除了在Python中工作之外,我无法尝试,python,except,Python,Except,我有一点凯撒密码,不能让try/except工作。它所做的只是重复第一次输入。它不显示“输入错误”。我能做些什么来解决这个问题 while True: try: encrypt = raw_input("Would you like to encrypt or decrypt a message? (E/D) : ").lower() print("") if encrypt == 'e': print("ENCRY

我有一点凯撒密码,不能让try/except工作。它所做的只是重复第一次输入。它不显示“输入错误”。我能做些什么来解决这个问题

while True:
    try:
        encrypt = raw_input("Would you like to encrypt or decrypt a message? (E/D) : ").lower()
        print("")
        if encrypt == 'e':
            print("ENCRYPTION: Due to the nature of the Caesar Cipher, Numbers and Symbols will 
                  be removed. Please represent numbers as the word...")
            print("I.E. - 7 should be entered as 'seven'. ")
            print("")
            sentence = raw_input("Please enter a sentence : ").lower()
            newString = ''
            validLetters = "abcdefghijklmnopqrstuvwxyz "
            space = []
            for char in sentence:
                if char in validLetters or char in space:
                    newString += char
            shift = input("Please enter your shift : ")
            resulta = []
            for ch in newString:
                x = ord(ch)
                x = x+shift
                resulta.append(chr(x if 97 <= x <= 122 else 96+x%122) if ch != ' ' else ch)
            print sentence
            print("")
            print("Your encryption is :")
            print("")
            print ''.join(resulta)
        if encrypt == 'd':
            print("DECRYPTION : PUNCTUATION WILL NOT BE DECRYPTED")
            print("")
            sentence = raw_input("Please enter an encrypted message : ").lower()
            newString = ''
            validLetters = "abcdefghijklmnopqrstuvwxyz "
            for char in sentence:
                if char in validLetters:
                newString += char
            shift = input("Please enter your shift : ")
            decryptshift = 26 - shift
            resulta = []
            for ch in newString:
                x = ord(ch)
                x = x + decryptshift
                resulta.append(chr(x if 97 <= x <= 122 else 96+x%122) if ch != ' ' else ch)
            print sentence
            print("")
            print("Your encryption is :")
            print("")
            print ''.join(resulta)
        if encrypt == 'q':
            break
    except:
        print("")
        print("INCORRECT INPUT!")
        print("")
    continue
为True时:
尝试:
encrypt=raw_input(“您想加密还是解密邮件?(E/D):”)。lower()
打印(“”)
如果encrypt==“e”:
打印(“加密:由于凯撒密码的性质,数字和符号将
将被删除。请将数字表示为单词…)
打印(“即-7应输入为“七”。)
打印(“”)
句子=原始输入(“请输入句子:”).lower()
新闻字符串=“”
validLetters=“abcdefghijklmnopqrstuvxyz”
空格=[]
对于句子中的字符:
如果Validleters中的字符或空格中的字符:
newString+=char
班次=输入(“请输入班次:”)
结果=[]
对于CHIN新闻字符串:
x=ord(ch)
x=x+shift

resulta.append(chr(x if 97我已经运行了您的代码,在我修复了不匹配的标识之后,它看起来还可以:

      if char in validLetters:
      newString += char
为此:

      if char in validLetters:
          newString += char
我得到了以下输出:

Please enter a sentence : test
Please enter your shift : 

INCORRECT INPUT!

try..except
块在您或系统引发异常时使用。如果
try
块成功完成,则不会执行
except
块。在您的情况下,您的程序不会进入
if

要获得预期结果,请按如下所示重写if语句:

    if encrypt == 'e':
        ...
    elif encrypt == 'd':
        ...
    elif encrypt == 'q':
        break
    else:
        print("")
        print("INCORRECT INPUT!")
        print("")
通过这种方式,您可以组合所有条件,并有一个“默认”语句。如果之前的
elif
s和第一个
if
均未输入,则
else
elif
s之后的
s将输入(基本上就是说没有一个条件是真的)


如果您不使用
elif
,并且只使用
If
(与您的原始代码一样),则条件链将断开,并且最后的
else
将捕获
加密!=“q”
,即使它是“e”或“d”。

这不是原始问题,但是

result = raw_input("Enter Q, D, or E")
while result.lower() not in ["q","d","e"]:
      result = raw_input("Invalid Response! Enter Q,D, or E:")
#now you know result is one of q d or e

可能是一种更好的获取输入的方法

哇…不要像这样使用try/except…try块中应该只有一行或两行…这样你就可以知道在哪一点你失败了…而且你的except是空的,所以它会捕获所有错误,包括你可能不想捕获的错误。是否有任何东西会引发异常?所以使用尝试每个IF语句?使用
try
处理可能引发异常的事情,或者以不会引发异常的方式编写它们。使用Else更合适吗?