Python继续显然没有将控制返回到while循环

时间:2016-03-08 10:06:37

标签: python mysql mysql-python

我有一个基于MySQLdb游标的while循环,我需要根据if语句中的某些条件移动到下一个迭代。清理后的代码如下所示:

    row = cur.fetchone()

    while row is not None: 
      unique_id = row[0] 
      mac = row[1] 
      url = row[2]

      location = old_path + unique_id 

      os.chdir(location)
      file_count = 0
      for file in os.listdir(location): 
        if file.startswith('phone.') and file.endswith('.cfg'):
            file_count = file_count + 1

      if file_count != 1: 
        userprompt = 'Multiple phone.MAC.RANDOM.cfg files detected continue?'
        cont = query_yes_no(userprompt) # prompt user on what to do next - abort or continue
        if cont == False:
          debugmsg = 'User requested abort - aborting'
          print debugmsg
          logger.info(debugmsg)
          sys.exit()
        elif cont == True:
            debugmsg = 'Moving to next on user request'
            logger.info(debugmsg)
            continue

此代码的行为与预期不符。运行时,如果它遇到与file_count !=1条件匹配的目录,则循环似乎再次运行而不会前进到下一行。除非我误解了continue的使用,否则我认为它应该有效地退出循环的迭代并移动到下一行。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

而不是继续'你需要获取下一行: row = cur.fetchone()

答案 1 :(得分:1)

你是正确的continue将转移到下一次迭代。

但是,您不会在任何迭代中修改任何内容。 您row is not None中的陈述while永远不会发生变化。它要么总是真的,要么总是假的。

你可能想做这样的事情:

while cur.fetchone() is not None: 
  #your code

或者更好:

while cur.fetchone(): 
  #your code