【发布时间】:2020-02-19 19:51:20
【问题描述】:
我有一个嵌套循环来按我想要的方式获取某些 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)
有没有办法在异常发生后返回第一个尝试块并继续,或者干脆忽略它并继续? 因为按照现在的情况,如果发生异常,它会破坏一切。
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']:
但无论如何它仍然失败。
【问题讨论】:
-
continue是您要查找的语句。 -
您能否编辑您的问题,以展示您在成功与失败时获得的数据示例?
-
@jordanm 我尝试使用 continue 而不是 finally 块,但它仍然以同样的方式崩溃。
-
@GreenCloakGuy 当然,等一下。
-
将 try 块降低到 for 语句之后,以便启动循环并捕获循环内的异常。这样, continue 语句将影响该特定循环而不是外部循环
标签: python python-3.x