2017-06-03 62 views
-1

我正在嘗試創建一個函數,用於在給定的CT掃描目錄中提取一批患者。在圖像分割過程中,某些患者的掃描失敗,因此我正在循環查看列表,直到找到成功分割患者的「批號」。但是,當我運行它時,下面的代碼無限循環。我不明白爲什麼'休息'不會終止循環。while循環中嘗試/異常命令(Python)

任何想法,將不勝感激!:)

INPUT_FOLDER = "D:\CT\stage1\stage1" 

patients = os.listdir(INPUT_FOLDER) 
patients.sort() 

#start, n_batch are given as parameters. 

data = start #initialize index for list 'validation_patients' 
valid_patient_list = [] #create an empty list for patient data with successful segmentation 

while True: #iterate over variable 'data' until the list of valid patients is completed 

    try: 
     x = patients[data] 
     load_scan(INPUT_FOLDER + '\\' + x) 
     valid_patient_list.append(data) 

     if len(valid_patient_list) == n_batch: #escape while loop when the list length is equal to designated batch size 

      break 

     else: data += 1 #if the length of list is smaller than the desired batch number, go for the next patient 

    except IndexError: 
     data += 1 # go for the next data: do not add this one to the list 
     continue 

#some more code below that deals with the valid_patient_list, but the loop runs infinitely.. 
+0

我強烈建議你讓你的錯誤處理更加具體,並添加一些反饋 - 目前,你(或其他任何人)不可能知道究竟出了什麼問題。 – jonrsharpe

+0

@jonrsharpe感謝您的評論。我添加了一條評論,使我的目的更加明確。我在這裏要做的是從數百個病人數據清單中挑選一批病人。我可以按順序迭代批次,但這不起作用,因爲有些患者的數據不起作用。我正在使用try/exception命令來處理這個問題。對不起,我對python比較陌生,所以我不確定這是否回答你的問題。 –

+0

我沒有問一個問題。我建議你做更多的調試 - 參見例如https://ericlippert.com/2014/03/05/how-to-debug-small-programs/。 – jonrsharpe

回答

0

好吧,如果你對病人[數據]一個IndexError,這是因爲數據> = LEN(患者),索引超出範圍錯誤,所以患者[數據+ 1]也會引發IndexErorr。

這會導致您的代碼在引發異常和捕獲異常之間進入無限循環,並且代碼永遠不會到達「break」部分。