Попробуйте запустить код x раз, и если он потерпит неудачу x раз, вызовите исключение - PullRequest
0 голосов
/ 03 мая 2020

Существует код, который случайным образом вызывает ошибку.

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

Есть ли правильный способ сделать это в Python?

#

Я думаю следующее, но это не кажется лучшим.

class MyException(Exception):
    pass


try:
    for i in range(x):
        try:
            some_code()
            break
        except:
            pass
except:
    raise MyException("Check smth")

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Просто создайте бесконечное число l oop, которое сломается при успехе, и подсчитайте ошибки в блоке except:

max_errors = 7

errors = 0
while True:
    try:
        run_code()
        break
    except ExceptionYouWantToCatch:  # You shouldn't use a bare except:
        errors += 1
        if errors > max_errors:
            raise MyException

Другой способ сделать это:

max_errors = 7


for run in range(max_errors):
    try:
        run_code()
        break
    except ExceptionYouWantToCatch:  # You shouldn't use a bare except:
        pass
else:  # will run if we didn't break out of the loop, so only failures
    raise MyException
0 голосов
/ 03 мая 2020

Вы можете сделать это так

for i in range(x):
    retries = <how many times you want to try> 
    while retries: # This could be while 1 since the loop will end in successful run or with exception when retries run out. 
        try:
            some code
            break # End while loop when no errors
         except:
            retries =- 1
            if not retries:
                raise MyException("Check smth")
...