【问题标题】:Restarting a for-loop with a changed iterator on an exception在异常上使用更改的迭代器重新启动 for 循环
【发布时间】:2016-06-09 10:37:25
【问题描述】:

我有一个代码块,它适用于我的 Dataframe 中的每个 ID,它应该执行“TRY”块代码,对于错误,转到异常,我的数据将被更改,并且在执行除代码后,它应该再次回到for循环,但似乎for循环下的Dataframe没有根据except代码块得到更新

for ID in data:
  try:
     user= api.get_user(ID)
     engine.execute("insert into sometable values(?,?,?,?,?,?,?,?,?)", str(ID), user.screen_name, user.description)
  except:
     data=pd.read_sql('sqltable',engine)

请帮忙

Giving 和另一个似乎是 for 循环约束的例子

list=[1,2,3]

for x in list:
  print list
  if x==3:
     list=[3,8,9,100,500,600,700]
     print list

尽管更新了列表,但列表中的 x 将保持不变,即之前的 3

【问题讨论】:

  • 这是您的代码的实际缩进还是您抄写得很糟糕?
  • 您需要在执行更改数据库的 SQL 语句后commitdbconn.commit() 或类似的。
  • 感谢您引起我的注意,我对这个问题本身感到不知所措
  • @Evert SQLpart 工作正常,我更关心 for 循环更新
  • 你同时改变了data while 的值。不要那样做!如果您完全更改 data,请重新启动循环。

标签: python loops for-loop try-except


【解决方案1】:

可能不是您的实际问题的解决方案(因为这可能会以不同的方式更好地解决,但很难说),这是使用更新的列表/数据框重新运行循环的一种方法/迭代器/随便:

mylist = [-1, 0, 1, 2]
while True:
    print('---:', mylist)
    for x in mylist:
        print(x)
        try:
            5/x
        except ZeroDivisionError:
            # update our list
            mylist = [el+1 for el in mylist]
            break  # shortcut for-loop
    else:
        # for loop completed; break out of while loop
        break

打印出来的

---: [-1, 0, 1, 2]
-1
0
---: [0, 1, 2, 3]
0
---: [1, 2, 3, 4]
1
2
3
4

我怀疑这是最好的解决方案,但人们多久使用一次else 子句到for 语句?

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2022-01-14
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多