首页 > 解决方案 > 为什么我在列表理解的 if 语句中收到“TypeError”?

问题描述

我正在做一个小密码项目,作为学习列表理解的一种方式。我已经编写了一个执行我想要的操作的 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)

标签: pythonlist-comprehension

解决方案


问题是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)]

如果有帮助,请告诉我。


推荐阅读