Как повторить попытку только строки, вызывающей ошибку в функции - PullRequest
0 голосов
/ 05 мая 2020

Это довольно сложно объяснить, но я хотел бы знать, есть ли способ несколько раз повторить попытку только той строки кода, которая вызвала ошибку, пока она не сработает. Например, скажем, у меня есть код:

def unreliabelfunction():
    #Line 1 of code
    #Line 2 of code (sometimes produces an error and sometimes works)
    #Line 3 of code

#Error handling should go where function is called, rather than inside the function.
unreliablefunction()

Я хотел бы иметь некоторую обработку ошибок, которая постоянно запускала бы строку 2, пока она не сработает (без повторного запуска строки 1), а затем продолжила бы остальную часть функция. Кроме того, я бы хотел, чтобы обработка ошибок происходила вне функции, а не меняла саму функцию.

Надеюсь, это имеет смысл и благодарю за вашу помощь :)

1 Ответ

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

Вы ищете блок try: except.

Вот примерный пример.

def unreliabelfunction():
    line_1()
    try_wrapper(line_2())
    line_3()

# Pass a function to try_wrapper
def try_wrapper(fn, args):
    successful = False
    while not successful:
        try:
            # Execute the function.
            fn(*args)
            # If it doesn't cause an exception, 
            # update our success flag.
            successful = True
        # You can use Exception here to catch everything, 
        # but ideally you use this specific exception that occurs.
        # e.g. KeyError, ValueError, etc.
        except Exception:
            print("fn failed! Trying again.") 

См. Документацию: https://docs.python.org/3/tutorial/errors.html#handling -exceptions

...