在出现异常后继续嵌套循环



我有一个嵌套的循环来以我想要的方式获取某些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块并在异常发生后继续,或者干脆忽略它并继续?因为现在的情况是,如果出现异常,就会破坏一切。

第1版:我试着把继续这样:

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']:

但无论如何,它还是失败了。

将其用于尝试块:

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,以满足您的下游需求。

最新更新