Dav*_*542 1 django django-models
我正在根据数据库中的两个列表检查用户提交的电子邮件地址 - 授权域列表和授权电子邮件地址列表.目前,如果两者都没有找到,那就是一个DoesNotExist例外.如果找不到,我该如何处理?
这是我目前在views.py中的代码 -
def register(request):
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
try:
email_list = EmailList.objects.get(domain=(cd['email'].split('@')[1]))
except:
email_list = EmailList.objects.get(email=cd['email'])
# I also need another except if neither works for the validator.
network= Network.objects.get(network=email_list.network)
User.objects.create(name=cd['name'], email=cd['email'], network=network)
return HttpResponseRedirect ('/user/view/')
else:
form = UserForm()
return render_to_response('register.html',{'form':form}, context_instance = RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
嵌套try/ except块.并且不要使用裸露except; 只捕获您可以处理的异常.
您可以嵌套try/ except:
try:
email_list = EmailList.objects.get(domain=(cd['email'].split('@')[1]))
except:
try:
email_list = EmailList.objects.get(email=cd['email'])
except:
...do something else
Run Code Online (Sandbox Code Playgroud)
如果您只是使用这些 try/ except 来做一个简单的测试,那么包装 try/ except 是值得的:
def get_or_none(model, **kwargs):
try:
return model.objects.get(**kwargs)
except model.DoesNotExist:
return None
Run Code Online (Sandbox Code Playgroud)
这为您提供了更具可读性的代码:
if get_or_none(EmailList, domain='domain.com'):
...do something
elif get_or_none(EmailList, domain='domain.com'):
...do something
else:
...do something
Run Code Online (Sandbox Code Playgroud)
正如伊格纳西奥在他的回答中提到的,你应该始终明确并只捕获你想要的例外。
| 归档时间: |
|
| 查看次数: |
5994 次 |
| 最近记录: |