Py学习  »  Python

捕获python中的特定错误

Joel G Mathew • 6 年前 • 1643 次点击  

我试图抓住一个特定的例外:

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'>

为什么会这样?如何捕获特定的异常?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38897
文章 [ 1 ]  |  最新文章 6 年前
DeepSpace
Reply   •   1 楼
DeepSpace    7 年前

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

请注意,您还可以将不同异常类型的处理组合到相同的 除了 条款:

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


参考
1。 Python: One Try Multiple Except