Нормально ли сделать функцию, которая обрабатывает все ошибки? - PullRequest
0 голосов
/ 02 мая 2018

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

def checkerr(datatype,obj):    

    try:
        var=datatype(obj)
        return(var)
    except ValueError as error:
        print(error,'you did not type in an integer')        
    except IOError as error:
        print(error,'file could not be found')


no=input('type in an integer: ')
realno=checkerr(int,no)

file=input('type in a filenane: ')
realfile=checkerr(open,file)

Как это сделать?

1 Ответ

0 голосов
/ 02 мая 2018

Вы на правильном пути. Определение этого фрагмента кода в функции позволяет вам избегать повторений .

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

Ваша функция вернет None после первой неудачной попытки. Тогда код снова усложняется.

Мое предложение:

def ask(prompt, datatype):
    while True:
        obj = input(prompt)
        try:
            var = datatype(obj)
            return(var)
        except (ValueError, IOError) as error:
            print(error)

Пример:

>>> i = ask('type in an integer: ', int); print('you entered: %d' % i)
type in an integer: two
invalid literal for int() with base 10: 'two'
type in an integer: 2
you entered: 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...