【发布时间】:2016-08-25 04:28:00
【问题描述】:
我有一个复杂的系统后端,但我试着做一个简单的例子,所以你知道我在说什么。
基本上我有一个 ID 列表,用户(通过 gui)将在这个列表中循环生成 ID。
在某些时候,他们想要检查并修复所有他们搞砸或跳过的问题(这些都将具有相同的 ID);这就是我有问题的地方。
我已经写了一些可以做到这一点的东西(检查列表是否有错误的 ID),但问题是一旦它到达列表的末尾,就会引发索引错误。我想干净地退出while循环,而是退出函数
def nextID():
'''
increment counter until we find a junk ID
'''
global tindx
skips = 0
while IDs[tindx] != 'junk_id' and tindx != len(IDs):
print 'This ID is good: %s' %IDs[tindx]
skips+=1
tindx+=1
print 'Skipped %i IDs' %(skips), 'tindx is now',tindx
这被设计成(又是一个巨大的简化)以下列方式使用
tindx = 0
IDs = ['abc','bcd','cde','junk_id','junk_id','def','efg','junk_id','fgh','ghi']
# This is all hadled with in an interactive GUI
# User wants next ID
nextID()
# User changes ID
IDs[tindx] = 'good_id!'
# User wants next ID
nextID()
# User changes ID
IDs[tindx] = 'another_good_id'
# etc ....
我知道如果我切换while循环条件的顺序,它将避免自动IndexError,但用户不会知道他们已经到达列表的末尾并会尝试更改ID(得到同样的错误)。
我想告诉用户他们完成了运行save_IDs() 函数,然后退出程序。这边重新设计软件,有没有比加入下面if条件更好的办法
while ...
if tindx == len(IDs):
print 'you\'re done'
save_IDs()
return None
【问题讨论】:
标签: python-2.7 loops exit