시스템의 복잡한 백엔드가 있지만 간단한 예제를 만들려고 했으므로 내가 무슨 말을하고 있는지 알 수 있습니다.목록 요소를 점검하고 오류가없는 목록의 끝에서 멈출 수있는 방법이 있습니까?
본질적으로 나는 ID 목록을 가지고 있으며, 사용자는 GUI를 통해 ID를 생성하는이 목록을 순환합니다.
어느 시점에서, 그들은 엉망이되거나 건너 뛴 모든 것을 고치고 수정하려고합니다 (이들은 모두 동일한 ID를가집니다). 이것은 내가 문제가있는 곳입니다.
정확하게 (나쁜 ID의 목록을 확인하는) 내용을 작성했지만 문제는 목록 끝에 도달하면 색인 오류가 발생합니다. 나는 깨끗하게 동안 루프, 대신
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