私はシステムの複雑なバックエンドを持っていますが、私が話していることを知るための簡単な例を作ろうとしました。リストの要素をチェックし、リストの終わりに(エラーなしで)停止するためのpyononicな方法はありますか?
私は基本的に私は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
私のnextIDの定義についてお話いただきありがとうございます。これは、主に自己学習のために私が遭遇する共通の問題です。 あなたが与えてくれた例はずっとよく読んでいます。代わりに、これをエミュレートするために使用した関数を再構成すると思います。それは仕事のビットですが、私はおそらく後で自分自身に感謝するでしょう。これを実証してくれてありがとう。 – FriskyGrub