builtins.TypeError:不支持的操作数类型 - :' int'和' str'

时间:2014-04-04 23:25:29

标签: python

def printsection1(animals, station1, station2):
    animals=['a01', 'a02', 'a03', 'a04', 'a05']
    station1={'a04': 5, 'a05': 1, 'a03': 62, 'a01': 21}
    station2={'a04': 5, 'a02': 3, 'a03': 4, 'a01': 1}

    print('Number of times each animal visited each station :')
    print('Animal Id'+' '*11+'Station 1'+' '*11+'Station 2'+'           ')

    for name in animals:
        if name in station1:
            visit=str(station1.get(name))
        else:
            visit=0
        if name in station2:
            visit2=str(station2.get(name))
        else:
            visit2=0

下面:

        space=(20-len(visit2))*' '

        print(name+' '*17+str(visit)+space+str(visit2))
    print('='*60)

输出:

Number of times each animal visited each station :
Animal Id           Station 1           Station 2           
a01                 21                  1                  
a02                 0                   3                  
a03                 62                  4                  
a04                 5                   5    
a05                 1                   0 

============================================================

大家好

我正在研究一个程序,这是它的一部分。我试图打印显示的内容。

我一直收到错误builtins.TypeError: object of type 'int' has no len() 除了a05之外,它的所有内容都是如此 我试图保持colums正好20个字符长(即station1,station2和animal Id)。所以我在打印前放入了这个条件。

我理解我正在为str和int调用一个不受支持的操作数(上面显示的位置) 希望你们能帮忙。 谢谢:))

更新: 它打印: 不打印a05

Number of times each animal visited each station :
Animal Id           Station 1           Station 2           
a01                 21                  1
a02                 0                   3
a03                 62                  4
a04                 5                   5
builtins.TypeError: object of type 'int' has no len()

1 个答案:

答案 0 :(得分:1)

问题在于spacespace2定义:

space=20-len(visit)*' '
space2=20-len(visit2)*' '

首先它将长度与空格字符相乘,它在python中运行(字符串只是重复),但之后,它会尝试评估int 20和字符串之间的减法,该字符串与TypeError

您需要将20-len(visit)括在括号中:

space=(20 - len(visit)) * ' '
space2=(20 - len(visit2)) * ' ' 

演示:

>>> visit = 'test'
>>> space=20-len(visit)*' '
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'int' and 'str'

>>> space=(20-len(visit))*' '
>>> space
'                '

此外,在space变量用于:

之后
print(name+' '*17+str(visit)+space+str(visit2))

此时space属于int类型 - 您需要将其强制转换为字符串:

print(name+' '*17+str(visit)+str(space)+str(visit2))