Как выйти из этого цикла for с операторами try-Кроме? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть цикл for с выдержками из блоков try-кроме, ссылающихся на https://machinetalk.org/2019/03/29/neural-machine-translation-with-attention-mechanism/?unapproved=67&moderation-hash=ea8e5dcb97c8236f68291788fbd746a7#comment-67:-

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-кроме. Я не знаю, что происходит, так как использование условия if в блоках внутреннего / внешнего цикла не работает.

1 Ответ

1 голос
/ 01 июля 2019

Это может быть проблема с вложенными циклами, как указано в этом ответе .Они предлагают использовать return, но тогда ваш цикл должен быть записан как функция.Если вам это не понравится, вы можете попробовать использовать различные уровни операторов прерывания, как показано в некоторых ответах.Используя конструкцию for, else ( объяснено здесь ), я думаю, что ваш код будет выглядеть следующим образом

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 break
...