Поймать конкретные ошибки в Python - PullRequest
0 голосов
/ 16 сентября 2018

Я пытался поймать конкретное исключение:

username = 'myuser'
try:
    user = User.objects.get(username=username)
    print(user)
except Exception as e:
    if type(e)=='django.contrib.auth.models.User.DoesNotExist':
        print('No such user')

    print (type(e))

Но вместо того, чтобы войти в цикл if, я получаю:

<class 'django.contrib.auth.models.User.DoesNotExist'>

Почему это происходит? Как я могу поймать конкретное исключение?

1 Ответ

0 голосов
/ 16 сентября 2018

type(e) не возвращает строку.Обратите внимание, что

(<class 'django.contrib.auth.models.User.DoesNotExist'> != 
 'django.contrib.auth.models.User.DoesNotExist')

Условие if должно быть if type(e) == django.contrib.auth.models.User.DoesNotExist или лучше, if isinstance(e, django.contrib.auth.models.User.DoesNotExist)

Однако правильное решение - использовать несколько except оговорки

username = 'myuser'
try:
    user = User.objects.get(username=username)
    print(user)
except User.DoesNotExist:
    # do something
    print('No such user')
except SomeOtherException:
    # do a different thing
except Foo:
    # do bar

Обратите внимание, что вы также можете комбинировать обработку разных типов исключений с одним и тем же предложением except:

try:
    # some bad code
except (User.DoesnotExist, SomeOtherException):
    # error handling code


Ссылка
1. Python: одна попытка несколько, кроме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...