Можно ли выполнить оператор try в al oop, если возникает какая-либо ошибка? - PullRequest
1 голос
/ 17 апреля 2020

Если возникает какая-либо ошибка, она переходит к оператору except после оператора try, где заканчивается программа. У меня такой вопрос: возможно ли, что если возникает ошибка, то без завершения программы она непрерывно выполняет оператор try?

Например:

try:
    some error caught
except:
    go to try statement again

И это выполняется непрерывно в цепочке

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Я просто решил это самостоятельно, поместив функцию в l oop, и она отлично работала.

while True:
   def afunc():
       #my code
   try:
       afunc()
   except:
       afunc()
0 голосов
/ 17 апреля 2020

Просто создайте al oop, который ломается, если не возникает исключение

while True:
   try:
       some_code_that_might_fail
    except Exception:  # catch all potential errors 
        continue  # if exception occured continue the loop
    break  # if no exception occured break out of the loop

Пожалуйста, попробуйте следующий пример:

while True:
    try:
        num = int(input("please enter a number"))
        print("The number is ", num)
        rec = 1 / num
    except Exception:
        print("either you entered no number or 0 (or some other error occured)")
        continue  # if any exception occured continue the loop
    break  # if no exception occured break out of the loop

print("1 / %f = %f" % (num, rec))

Как упоминал Бруно. В целом (и это то, что я делаю в своем собственном коде), не рекомендуется перехватывать все исключения.

Вы должны явно отлавливать только известные исключения

Приложение 2020-04- 17

Читая ваш ответ, я думаю, что ваш вопрос немного вводит в заблуждение. Возможно, ваша проблема в том, что у вас есть функция, которую вы хотели бы выполнять вечно. Однако иногда функция завершается (из-за ошибки) без , вызывающего исключение.

Если это так, тогда просто напишите:

while True:
   afunc()
   print("function terminated. I will restart it")

, но обратите внимание, что ваша программа никогда не завершится.

или если функция иногда вызывает исключение, а иногда нет, а просто прекращает работу, и вы хотите вызывать функцию всякий раз, когда она завершается с ошибкой или завершается, тогда выполните.

while True:
   try:
      afunc()
      print("function terminated without exception")

   except Exception:
      pass
      print("function encountered an exception")
   print("will restart")

Если вы хотите, чтобы эта функция могла завершиться, и у вас есть возможность выяснить, была ли это ошибка или нет, вы можете сделать что-то вроде:

while True:
   try:
      afunc()
      if i_know_that_func_terminated_correctly():
          print("function terminated correctly")
          break
      print("function terminated without an error")

   except Exception:
      pass
      print("function terminated with an exception")
   print("restarting")

Я добавил операторы печати для отладка / визуализация. Просто удалите их или прокомментируйте их, если не нужно. (Вот почему я оставил оператор pass в предложении except)

...