簡體   English   中英

異常后繼續嵌套循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM