我试图捕获一个特定的异常:
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'>
为什么会这样呢?如何捕获特定的异常?
最佳答案
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: One Try Multiple Except
关于python - 捕获python中的特定错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52354405/