Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:';非类型';对象没有属性'__获取项目';_Python - Fatal编程技术网

Python 类型错误:';非类型';对象没有属性'__获取项目';

Python 类型错误:';非类型';对象没有属性'__获取项目';,python,Python,嗨,我创建了一个名为runloopg(x,y,z)的函数,它生成一个列表,但我不能调用列表中的项目: p=runloopg(10,0.1,6) <generator object rtpairs at 0x000000000BAF1F78> [(0,0,0,0,0,1), (0.01,0,0,0,0,1), (0.0062349,0.00781831,0,0,0,1), (-0.00222521,0.00974928,0,0,0,1), (-0.00900969,0.00433884

嗨,我创建了一个名为runloopg(x,y,z)的函数,它生成一个列表,但我不能调用列表中的项目:

p=runloopg(10,0.1,6)
<generator object rtpairs at 0x000000000BAF1F78>
[(0,0,0,0,0,1), (0.01,0,0,0,0,1), (0.0062349,0.00781831,0,0,0,1), (-0.00222521,0.00974928,0,0,0,1), (-0.00900969,0.00433884,0,0,0,1), (0.0549583,-0.0712712,0,0,0,1), (0.0627244,-0.0645419,0,0,0,1), (0.0696727,-0.0569711,0,0,0,1), (0.0757128,-0.0486577,0,0,0,1), (0.0807659,-0.0397099,0,0,0,1), (0.084766,-0.0302444,0,0,0,1), (0.0876611,-0.0203847,0,0,0,1), (0.0894134,-0.0102592,0,0,0,1)]

您没有发布相关代码(函数的定义),但很明显,此函数返回
None


edit:您发布的
runloopg
片段中的Ok确实返回了一个列表,因此问题出在别处。我看到您的代码段以一个注释掉的
print
语句开始,该语句打印调用
rtuniform
的返回值,这与您发布的交互式会话相匹配。我猜您正在执行一个旧版本的函数,该函数刚刚打印并立即退出(隐式返回
None
),然后您编辑了代码,但未能正确重新加载函数

返回一个生成器对象。一旦你使用了发电机,它就耗尽了,你不能再使用它

但您可以将其所有值作为一个列表:

p = list(runloopg(10,0.1,6))

由于您的方法返回生成器,因此需要使用它:

for i in runloopg(10,0.1,6):
   print(i)

p = list(runloopg(10,0.1,6))

# If you just want the first item:

first_item = next(runloopg(10,0.1,6))

您的
runloopg
函数似乎缺少一个
return
。所以,它是这样做的:

def runloopg():
   [(0,0,0,0,0,1), (0.01,0,0,0,0,1), (0.0062349,0.00781831,0,0,0,1)] # and the rest
或者这个:

def runloop():
    x = [(0,0,0,0,0,1), (0.01,0,0,0,0,1), (0.0062349,0.00781831,0,0,0,1)] # and the rest
与此相反:

def runloopg():
    return [(0,0,0,0,0,1), (0.01,0,0,0,0,1), (0.0062349,0.00781831,0,0,0,1)] # and the rest

在第一个版本中,运行该行,然后立即丢弃其结果,函数继续。在第二种情况下,结果存储在变量中,函数继续。在这两种情况下,函数都会从末尾掉下来,Python会在这种情况下为您返回
None
。在上一个版本中,您计算的结果被返回,并最终被分配到
p
-因此
p
将是一个列表,而
p[0]
将起作用。

您的函数在列表中不返回生成器对象,因此循环遍历它并获得所需的值。只需调试代码并尝试dir(您的对象),然后查看,它返回的是什么,我的意思是查看方法和属性,找出你拥有的对象类型。@MairajKhan错误已经准确地说明了
p
是什么类型的对象-
NoneType
(因此,
p
None
)我给出了类似的答案,但不知何故,我并不认为这是问题所在。不幸的是,当我键入p=list(runloopg(10,0.1,6))时,我得到了错误“NoneType”对象不可iterable。虽然这是真的,但它实际上并不能解释OP的错误-生成器不会产生
None
,更不用说以某种方式变成
None
,在它耗尽之后-它变成了一个空的iterable(即,每当你尝试迭代它时,它会立即引发
StopIteration
)。不幸的是,当我键入p=list(runloopg(10,0.1,6))时,我得到了错误“NoneType”对象不iterable。我在原始帖子中添加了函数定义。你能找出问题并找到解决方案吗?将函数的返回值传递到
列表
不会有任何改变,因为你的函数已经返回了一个列表。回答否决,因为这显然不是解释(也不是解决方案)。我在原始帖子中添加了函数的定义。你能确定问题以及如何解决它吗?抱歉,不能-你的函数实际上返回了一个列表,所以问题在别处。嗨,Ivc。我的函数定义中已经有了“return”。除此之外,我还在原来的帖子中添加了函数定义。你能看看问题出在哪里吗?
def runloop():
    x = [(0,0,0,0,0,1), (0.01,0,0,0,0,1), (0.0062349,0.00781831,0,0,0,1)] # and the rest
def runloopg():
    return [(0,0,0,0,0,1), (0.01,0,0,0,0,1), (0.0062349,0.00781831,0,0,0,1)] # and the rest