iPython: убить цикл for с помощью try / кроме этого? - PullRequest
0 голосов
/ 17 октября 2019

Я знаю, что не должен попадать в такие ситуации, но мне нравится использовать iPython и держать переменные во время эксперимента. Я вставляю фрагменты кода из Spyder и запускаю их, затем проверяю переменные и т. Д. Теперь у меня есть такой фрагмент кода:

for a in range(bignum):
  try:
    <something>
  except:
    print('Badness')

Я запускаю его и понимаю, что у меня ошибкатам, но теперь я не могу остановить это с помощью Ctrl-C, потому что try / кроме просто печатает сообщение и движется дальше. Есть ли способ остановить цикл, не выбрасывая мою сессию?

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вы можете использовать break внутри предложения except, чтобы выйти из цикла. В качестве альтернативы, вы можете переместить цикл for внутри блока try / исключением. Если вы хотите сделать одну вещь для KeyboardInterrupt (ctrl + c) и другую вещь для любого другого исключения , вы можете отловить и то, и другое.

for a in range(big_num):
  try:
    pass # Do your thing
  except KeyboardInterrupt:
    print("You pressed ctrl c...")
    break
  except Exception as e: # Any other exception
    print(str(e)) # Displays the exception without raising it
    break

или

try:
  for a in range(big_num):
    pass # Do your thing
except KeyboardInterrupt:
  print("You pressed ctrl c...")
except Exception as e:
  print(str(e))
0 голосов
/ 17 октября 2019

Я бы пошел со следующей структурой:

for a in range(bignum):  
    try:
       <something>
    except Exception:   # Exception is a base class
        print('Badness')
        continue  # to continue next for loop iteration 
        # or use break if you want to stop the whole foor loop

Конечно, вы можете использовать более конкретное исключение, а не базовый класс Исключение для стандартной библиотеки

...