попробуй: и ожидай: обработка строковых ошибок в python - PullRequest
0 голосов
/ 07 апреля 2020

В настоящее время узнаем о попытках и исключениях и попытках отловить ошибки с делением на числа

Это мой код:

def divide(a, b): 
    try:
        return a/b
    except ZeroDivisionError: 
        return "dividing by zero not possible "
    except TypeError:
        return "a and b must both be integers"
    except NameError:
        return "a and b must both be integers"


print(divide(2,a))

, но по какой-то причине он не перехватывает TypeError и NameError, когда я делаю второе значение 'a' и возвращает эту ошибку:

Traceback (most recent call last):
  File "d:/Python/Learning-Python/Section 18/Section_18_errors.py", line 24, in <module>
    print(divide(2,a))
NameError: name 'a' is not defined

Моя попытка и ожидание ловит NameError, верно? Разве он не должен возвращать "a и b должны быть целыми числами"

Ответы [ 2 ]

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

Как вы это называете, divide(2,a) интерпретатор ищет переменную a, которая будет иметь значение. Поскольку вы не присвоили значение для a, он выдает ошибку NameE, которая не определена. Как указывалось в других комментариях и ответах, вы должны сделать a символом вместо переменной, что можно сделать, присвоив значение a, как в a = 'a', или просто передайте его в виде самой строки (т.е. divide(2,'a')).

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

Если вы хотите попробовать передать символ вместо целого числа, попробуйте: print(divide(2,"a")).

Передача a без определения его ранее приведет к сбою во время оценки кода, а не во время выполнения и поэтому ловить NameError здесь не поможет.

...