TypeError - 无法隐式地将'int'对象转换为str

时间:2015-12-16 12:13:25

标签: python python-3.x

当我运行这段代码时,shell会输出错误'无法将'int'对象转换为str隐式'。

我在StackOverflow上尝试了其他修复,但是我无法在代码中修复此问题。

import math
while True: 
    try:
        di = input('Input 7 digit number ')
        total = (int(di[0])+int(di[2])+int(di[4])+int(di[6]))*3+(int(di[1])+int(di[3])+int(di[5]))
    if len(str(di)) != 7:
        print('Incorrect')           
    if len(str(di)) == 7:
        print('Okay')
        multiplier = [3,1]
        times = ''
        total = 0     
        for index, digit in enumerate(list(str(di))):            
            total = total + int(digit)*multiplier[index%2]               
            times = times+str(int(digit)*multiplier[index%2])+', '          
        mof10 = total + (10 - total%10)          
        checkdigit = mof10 - total
        final = str(di) + str(checkdigit)
        print(times[:-1]) 
        print(total)
        print(mof10)
        print(checkdigit)
        print(final)
    final = (di[1]+di[3]+di[5])+((di[0]+di[2]+di[4]+di[6])*3)
    final = (final+4)
    Base10=(int(round(final, -1)))
    Check = Base10-final
    checkdigit = int(input('8th number in product code: '))
    if (n8 == Check):
        print('Valid product code')
except ValueError:
    print('Invalid product code')
    break 

错误讯息:

  

追踪(最近一次呼叫最后一次):

     

文件“C:\ Documents and Settings \ User \ Desktop \ GTIN-8 product code.py”,第55行,in           final =(final + 4)

     

TypeError:无法将'int'对象隐式转换为str

2 个答案:

答案 0 :(得分:5)

您首先获得值d1作为str

di = input('Input 7 digit number ')

然后通过

获得final
final = (di[1]+di[3]+di[5])+((di[0]+di[2]+di[4]+di[6])*3)

因此final也是str,所以你无法做到

final = (final+4)

因为finalstr4int

答案 1 :(得分:4)

您无法在Python中为字符串添加整数。您需要将它们转换为整数或字符串。

final = int(final) + 4  # convert final from string to integer and add 4

final = final + '4'  # append the string '4' to the end of the string final.

更改上面的行将停止错误,但我认为您的代码的其他部分使用字符串,您应该使用整数。

例如,如果di=1234567,则di[0]di[1]等是字符串。

因此di[0]+di[2]+di[4]+d[6]是字符串' 1357'而不是1+3+5+7=16。当你执行di[0]+di[2]+di[4]+d[6] * 3时,字符串重复三次' 135713571357'。

如果您在代码的开头创建一个整数列表,您可能会发现它最简单:

di = [int(x) for x in str(di)]

然后di[0]di[1]等等将是整数。