获取TypeError:只能将str(而不是“ int”)连接到str

时间:2018-07-09 19:13:30

标签: python unicode

我是编码的新手,所以我决定为unicode编写某种用于测试目的的秘密代码,我通过在Unicode中添加数字来做到这一点,所以这是一个秘密。我一直在收到此错误,但我不知道如何解决。有什么解决办法吗?这是代码:

while True:
    try:
        message = int(input("Enter a message you want to be decrypt: "))
        break
    except ValueError:
        print("Error, it must be an integer")
secret_string = ""
for char in message:
    secret_string += chr(ord(char - str(742146))                      
print("Decrypted", secret_string)
q = input("")

6 个答案:

答案 0 :(得分:6)

Python 的工作方式与JavaScript有所不同,例如,您要连接的值必须是 int str ... < / p>

例如,下面的代码抛出错误

print( "Alireza" + 1980)

像这样:

Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    print( "Alireza" + 1980)
TypeError: can only concatenate str (not "int") to str

要解决此问题,只需将str添加到您的数字或值中,例如:

print( "Alireza" + str(1980))

结果为:

Alireza1980

答案 1 :(得分:3)

使用f字符串来解析TypeError

# the following line causes a TypeError
# test = 'Here is a test that can be run' + 15 + 'times'

# same intent with a f-string
i = 15

test = f'Here is a test that can be run {i} times'

print(test)

# output
'Here is a test that can be run 15 times'
i = 15
# t = 'test' + i  # will cause a TypeError

# should be
t = f'test{i}'

print(t)

# output
'test15'
  • 问题可能是试图评估表达式,其中变量是数字的字符串。
  • 将字符串转换为int
  • 这种情况特定于此问题
  • 进行迭代时,务必注意dtype
i = '15'
# t = 15 + i  # will cause a TypeError

# convert the string to int
t = 15 + int(i)
print(t)

# output
30

注意

  • 答案的前面部分解决了问题标题中显示的TypeError,这就是为什么人们似乎会问这个问题的原因。
  • 但是,这不能解决与OP提供的示例相关的问题,下面将对此进行解决。

原始代码问题

  • TypeError的原因是message类型是str
  • 该代码会迭代每个字符,并尝试将char类型的str添加到int
  • 可以通过将char转换为int
  • 来解决该问题。
  • 在显示代码时,需要使用secret_string而不是0来初始化""
  • 由于ValueError: chr() arg not in range(0x110000)超出了7429146的范围,因此代码也产生了chr()
  • 使用较小的数字解决
  • 输出不是预期的字符串,这将导致问题中的更新代码。
message = input("Enter a message you want to be revealed: ")

secret_string = 0

for char in message:
    char = int(char)
    value = char + 742146
    secret_string += ord(chr(value))
    
print(f'\nRevealed: {secret_string}')

# Output
Enter a message you want to be revealed:  999

Revealed: 2226465

更新的代码问题

  • message现在是int类型,因此for char in message:导致TypeError: 'int' object is not iterable
  • message被转换为int,以确保inputint
  • 使用str()
  • 设置类型
  • 仅使用chrvalue转换为Unicode
  • 请勿使用ord
while True:
    try:
        message = str(int(input("Enter a message you want to be decrypt: ")))
        break
    except ValueError:
        print("Error, it must be an integer")
        
secret_string = ""
for char in message:
    
    value = int(char) + 10000
    
    secret_string += chr(value)

print("Decrypted", secret_string)

# output
Enter a message you want to be decrypt:  999
Decrypted ✙✙✙

Enter a message you want to be decrypt:  100
Decrypted ✑✐✐

答案 2 :(得分:1)

代替使用“ +”运算符

print(“ Alireza” + 1980)

使用逗号“,”运算符

print(“ Alireza”,1980)

答案 3 :(得分:0)

问题是您正在执行以下操作

str(chr(char + 7429146))

其中char是一个字符串。您不能使用字符串添加int。这将导致该错误

如果您想获取ascii代码并添加一个常数,则为

。如果是这样,您可以只执行ord(char)并将其添加到数字中。但同样,chr可以取0到1114112之间的值

答案 4 :(得分:0)

更改secret_string += str(chr(char + 7429146))

secret_string += chr(ord(char) + 7429146)

ord()将字符转换为其等效的Unicode整数。 chr()然后将此整数转换为等效的Unicode字符。

此外,7429146的数字太大,应该小于1114111

答案 5 :(得分:0)

使用此:

print("Program for calculating sum")
numbers=[1, 2, 3, 4, 5, 6, 7, 8]
sum=0
for number in numbers:
    sum += number
print("Total Sum is: %d" %sum )