TypeError:“类型为'int'的对象没有len()”,即使我不使用函数“len()”

时间:2017-03-15 05:44:35

标签: python

我一直在研究预测扇贝种群变异的项目,但似乎我的代码有一个我无法识别的问题。如果有人可以提供帮助,我会感激不尽:

import matplotlib.pyplot as plt
S=[4000]
a1 = 0.08
t = 50
for e in range(t-1):
    S.append(S[e]*a1+ S[e])
time = range(0,t)
plt.plot(time, S)
plt.axis(0, t, 0, 18000)
plt.xlabel("Time")
plt.ylabel("Scallops")
plt.title(r'Scallops Population')
plt.show()

此脚本返回正确的图形,但也返回以下错误消息:“类型'int'的对象没有len()” 完全追溯:

Traceback (most recent call last):    
  File "<ipython-input-79-1e9eb32fa3a3>", line 1, in <module>
    runfile('C:/arquivos python/Entrega 4.py', wdir='C:/arquivos python')
  File "C:\Anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)
  File "C:\Anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)
  File "C:/arquivos python/Entrega 4.py", line 16, in <module>
    plt.axis(0, t, 0, 18000)
  File "C:\Anaconda\lib\site-packages\matplotlib\pyplot.py", line 1537, in axis
    return gca().axis(*v, **kwargs)
  File "C:\Anaconda\lib\site-packages\matplotlib\axes\_base.py", line 1633, in axis
    if len(v) != 4:
TypeError: object of type 'int' has no len()

1 个答案:

答案 0 :(得分:1)

axis method有这个签名:

  

matplotlib.pyplot.axis(*v, **kwargs)

     

[...]

     

>>> axis(v)

     

使用v = [xmin, xmax, ymin, ymax]设置x和y轴的最小值和最大值。

因此,您需要传递一个包含4个值作为第一个参数的列表,而不是4个参数:

plt.axis([0, t, 0, 18000])

您可以在堆栈跟踪中看到库如何检查第一个参数是一个包含4个值的列表:

if len(v) != 4:

但在您的通话中,v0,而应为[0, t, 0, 18000]