为什么我在列表理解的 if 语句中得到 "TypeError"?

Why am I getting a "TypeError" in an if statement for a list comprehension?

我正在做一个小密码项目,以此来学习列表理解。我已经编写了一个 for 循环来执行我想要的操作(注释掉的部分),并且我已经开始编写一个列表理解 encMessage = [alph[alph.index(i) + keyShift] for i in list(message)] 我也注释掉了它。

但是,带有附加 if 语句的列表理解会导致:TypeError: cannot concatenate 'str' and 'int' objects

为什么“if”部分有类型错误而不是表达式?

import string
alph = string.ascii_lowercase


def encM (message, keyShift):

    # for i in list(message):
    #     tempNum = alph.index(i) + keyShift
    #     if tempNum > 26:
    #         tempNum = tempNum - 26
    #     tempNum = alph[alph.index(i)]
    #     print(tempNum)

    # encMessage = [alph[alph.index(i) + keyShift] for i in list(message)]
    encMessage = [alph[alph.index(i) + keyShift] for i in list(message) if (alph[alph.index(i)] + keyShift > 26)]
    #string1 = ''.join([str(item) for item in encMessage])

print(encMessage)

encM("test", 3)

问题是 alph[alph.index(i)] + keyShift 如果您将其更改为 alph.index(i)] + keyShift 它会起作用,因为后者获取索引值而不是索引处的 str 值。

以下解决异常:

encMessage = [alph[alph.index(i) + keyShift] for i in list(message) if (alph.index(i) + keyShift > 26)]

但是 encMessage 是空的,然后我按如下方式更改了上面的代码,这似乎给出了正确的移位:

encMessage = [alph[alph.index(i) + keyShift] for i in list(message) if (alph.index(i) + keyShift < 26)]

如果有帮助,请告诉我。