我有一个引用https://machinetalk.org/2019/03/29/neural-machine-translation-with-attention-mechanism/?unapproved=67&moderation-hash=ea8e5dcb97c8236f68291788fbd746a7#comment-67:-的for循环,其中包含try-except块的摘录
for e in range(NUM_EPOCHS):
en_initial_states = encoder.init_states(BATCH_SIZE)
for batch, (source_seq, target_seq_in, target_seq_out) in enumerate(dataset.take(-1)):
loss = train_step(source_seq, target_seq_in,
target_seq_out, en_initial_states)
if batch % 100 == 0:
print('Epoch {} Batch {} Loss {:.4f}'.format(
e + 1, batch, loss.numpy()))
try:
test_target_text,net_words = predict()
except Exception:
continue
if loss <=0.0001:
break我希望从循环中走出来,不执行try块,离开所有东西,简单地从两个循环中走出来,即内循环和外循环以及整个try-except块。我不知道出了什么问题,因为在内/外循环块中使用if条件不起作用。
发布于 2019-07-01 15:47:45
这可能是嵌套循环的问题,如this answer所述。他们建议使用return,但是你的循环需要写成一个函数。如果这没有吸引力,您可以尝试使用不同级别的break语句,如一些答案中所示。使用for,else构造(explained here),我认为您的代码应该如下所示
for e in range(NUM_EPOCHS):
en_initial_states = encoder.init_states(BATCH_SIZE)
for batch, (source_seq, target_seq_in, target_seq_out) in enumerate(dataset.take(-1)):
loss = train_step(source_seq, target_seq_in,
target_seq_out, en_initial_states)
if batch % 100 == 0:
print('Epoch {} Batch {} Loss {:.4f}'.format(
e + 1, batch, loss.numpy()))
try:
test_target_text,net_words = predict()
except Exception:
continue
if loss <=0.0001:
break
else:
continue ###executed if inner loop did NOT break
break ###executed if inner loop DID breakhttps://stackoverflow.com/questions/56805439
复制相似问题