[英]Continue a nested loop after exception
我有一個嵌套循環,可以按照我想要的方式獲取某些 JSON 元素,但有時,我從中獲取的 API 會變得混亂並且會破壞某些字段 - 我不確定如何處理這個問題,因為它似乎有所不同每次,所以我想知道是否有辦法繼續嵌套的 for 循環,即使其中發生異常,或者至少返回到第一個循環並再次繼續。
我的代碼是這樣的:
fields = ['email', 'displayname', 'login']
sub_fields = ['level', 'name']
all_data = []
for d in data:
login_value = d['login']
if login_value.startswith('3b3'):
continue
student = fetched_student.student_data(login_value)
student = json.loads(student)
final_json = dict()
try:
for field in fields:
#print ("Student field here: %s" % student[field])
final_json[field] = student[field]
except Exception as e:
print (e) # this is where I get a random KeyValue Error
#print ("Something happening here: %s " % final_json[field])
finally:
for sub_field in sub_fields:
for element in student['users']:
if element.get(sub_field):
final_json[sub_field] = element.get(sub_field)
for element in student['campus']:
if element.get(sub_field):
final_json[sub_field] = element.get(sub_field)
all_data.append(final_json)
print (all_data)
有沒有辦法在異常發生后回到第一個 try 塊並繼續,或者只是忽略它並繼續? 因為就像現在的情況,如果異常發生,它會破壞一切。
EDIT1:我試過像這樣繼續:
try:
for field in fields:
#print ("Student field here: %s" % student[field])
final_json[field] = student[field]
except Exception as e:
print (e)
continue
for sub_field in sub_fields:
for element in student['users']:
但無論如何它仍然失敗。
將此用於 try 塊:
for field in fields:
try:
#print ("Student field here: %s" % student[field])
final_json[field] = student[field]
except Exception as e:
print (e)
continue
for sub_field in sub_fields:
for element in student['users']:
問題是由於 try 塊的縮進級別,continue 影響了最外層的循環。 將 try 塊更改為循環內部將捕獲該循環中的錯誤並繼續該特定循環的迭代。
可能你可以在你的try
塊中使用dict
的 get 方法:
try:
for field in fields:
#print ("Student field here: %s" % student[field])
final_json[field] = student.get(field, "") # 2nd arg is fallback object
根據需要,您可以傳入一個新的dict
(又名 JSON 對象)、新的list
(又名 JSON 數組)或類似上面的str
以滿足您的下游需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.