-1

我正在尝试编写一个允许使用命令 psspy.change_vref 运行迭代的程序,它每次都会更改 Meas_Bus_Voltage[i]。这是我的代码:

print 'LengthOfData=',LengthOfData
for i in range(0,LengthOfData):
  print 'i=',i
  time_point=Time_Tag[i]

  if i>=1:
    psspy.powerflowmode() 

    print 'Meas_Bus_Voltage[i]=',Meas_Bus_Voltage[i]
    print type(Meas_Bus_Voltage[i])

    ierr,realaro = psspy.change_vref(1, '1', Meas_Bus_Voltage[i])
    ierr,realaro = psspy.change_gref(1, '1', Meas_Bus_Frequency[i])

    psspy.fact()
    psspy.dynamicsmode(0)

  psspy.run(0,time_point,10,10,0)  

然后我得到了错误:

LengthOfData= 2000 i= 0 i= 1 Meas_Bus_Voltage[i]= 1.04118376974
ierr,realaro = psspy.change_vref(1, '1', Meas_Bus_Voltage[i])
TypeError: 'int' object is not iterable

我在这里使用范围为 i,它是从 0 到 2000,为什么它不可迭代?有人可以帮我吗?

4

2 回答 2

4

考虑以下两个陈述:

>>> def change_vref(): return 1
... 
>>> a,b = change_vref()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> 

如您所见,期望返回 an 的函数有两个返回值int会产生您看到的错误消息。

重新阅读您的文档以查看psspy.change_vref()返回的内容。

于 2013-09-28T22:53:58.550 回答
1
>>> def f(n):
...     return 1


>>> a,b = f(2)

最后一行代码中发生的是序列解包。序列是一个可迭代的(例如元组或列表,但更一般地说,它意味着它有一个可用于迭代它的迭代器)。因此,如果只返回一个值,您将收到下面的错误,这意味着需要一个序列,但没有收到它。:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
于 2013-09-28T23:03:56.810 回答