Python 3.x python中生成器的StopIteration错误

Python 3.x python中生成器的StopIteration错误,python-3.x,iteration,generator,stopiteration,Python 3.x,Iteration,Generator,Stopiteration,该错误要求使用StopIteration语句,该语句已经存在,我可能只是将其放在了错误的代码段中。我找不到与此类似的发电机的任何用途。错误: Traceback (most recent call last): File "W:\My Data Sources\My Documents\A level\Computer Science\Python\Tasks\Painting estimate copy wout gen.py", line 102, in <module>

该错误要求使用StopIteration语句,该语句已经存在,我可能只是将其放在了错误的代码段中。我找不到与此类似的发电机的任何用途。错误:

Traceback (most recent call last):
  File "W:\My Data Sources\My Documents\A level\Computer Science\Python\Tasks\Painting estimate copy wout gen.py", line 102, in <module>
    area()
  File "W:\My Data Sources\My Documents\A level\Computer Science\Python\Tasks\Painting estimate copy wout gen.py", line 71, in area
    sub2()
  File "W:\My Data Sources\My Documents\A level\Computer Science\Python\Tasks\Painting estimate copy wout gen.py", line 48, in sub2
    area()
  File "W:\My Data Sources\My Documents\A level\Computer Science\Python\Tasks\Painting estimate copy wout gen.py", line 67, in area
    print("Please enter the dimensions of each wall in your",next(iter1),"when prompted.")
StopIteration
回溯(最近一次呼叫最后一次):
文件“W:\My Data Sources\My Documents\A level\Computer Science\Python\Tasks\Paint estimate copy wout gen.py”,第102行,在
面积()
文件“W:\My Data Sources\My Documents\A level\Computer Science\Python\Tasks\Painting estimate copy wout gen.py”,第71行,区域中
sub2()
文件“W:\My Data Sources\My Documents\A level\Computer Science\Python\Tasks\Paint estimate copy wout gen.py”,第48行,子2中
面积()
文件“W:\My Data Sources\My Documents\A level\Computer Science\Python\Tasks\Paint estimate copy wout gen.py”,第67行,区域中
打印(“请在屏幕上输入每面墙的尺寸”,下一步(iter1),“出现提示时”。)
停止迭代

RoomDetails=[]
墙尺寸=[]
计数器=0
def rooms():
RoomNum=str(输入(“请输入您需要粉刷的房间名称(例如“休息室”):”)
RoomDetails.append(RoomNum)
inp1=input(“您是否已输入所有需要装饰的房间?Y或N:”)
如果inp1==“y”:
打印(“”)
elif inp1=='Y':
打印(“”)
elif inp1=='n':
打印(“这些是您目前已进入的房间:”,RoomDetails)
房间()
elif inp1=='N':
打印(“这些是您目前已进入的房间:”,RoomDetails)
房间()
def sub():
wallH=浮动(输入(“此墙的高度是多少?(以米为单位):”)
wallW=浮动(输入(“这面墙的宽度是多少?(以米为单位):”)
wallD=wallH*wallW
墙尺寸。附加(墙尺寸)
def sub2():
全局计数器
var3=输入(“您是否输入了该房间中所有需要涂漆的墙壁的尺寸?Y或N?”)
如果var3==“y”:
面积()
elif var3==“Y”:
面积()
elif var3=='n':
分()
sub2()
elif var3=='N':
分()
sub2()
全球iter1
iter1=iter(房间详细信息)
def区域():
全局计数器
计数器=计数器+1
打印(“请在屏幕上输入每面墙的尺寸”,下一步(iter1),“出现提示时”。)
分()
sub2()
如果柜台
您正在将
迭代器
与列表元素进行比较:

iter1 == RoomDetails[-1]:
但是迭代器不会是什么东西——它更像是一个工具而不是一个值。例如,列表的迭代器如下所示:

>>> iter([])
<listiterator object at 0x6ffffdaf090>
国际热核实验堆([]) 因此,除非您的另一个对象是同一个迭代器,否则它将始终返回False,因此不会引发ValueError。试着让测试简单一点,它应该可以工作

此外,您还没有真正创建迭代器-您需要生成值,使函数成为生成器表达式。为了实现你的目标,仅仅返回一个列表或一些简单的东西可能是值得的?通常,迭代器将产生area()的返回值:

如果计数器

由于您只需调用
area()
,而不是对其进行迭代,因此您不需要在此处将其作为迭代器。

太好了,谢谢!我对编程相当陌生,我和我的计算机科学老师都看不出我哪里出了问题。如果这是个愚蠢的问题,我很抱歉:)很乐意帮忙。如果解决了您的问题,请随意接受答案:)。谢谢
>>> iter([])
<listiterator object at 0x6ffffdaf090>
if counter < len(RoomDetails):
    yield area()