2011-05-11 4 views
1

데이터베이스에서 두 개의 목록 (승인 된 도메인 목록 및 인증 된 전자 메일 주소 목록)과 비교하여 사용자가 제출 한 전자 메일 주소를 검사하고 있습니다. 현재 발견되지 않으면 DoesNotExist 예외가 발생합니다. 둘 다 발견되지 않으면 어떻게 처리할까요? 당신은 그냥 사용하는 경우django에서 데이터베이스 쿼리 시도/제외

 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 

을 할 제외하고 이러한/시도 :

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

답변

3

당신은 둥지 try/except 수 있습니다 - 여기

내가 현재 views.py에있는 코드입니다 간단한 테스트로 try/except를 랩하는 것이 좋습니다.

def get_or_none(model, **kwargs): 
    try: 
     return model.objects.get(**kwargs) 
    except model.DoesNotExist: 
     return None 

if get_or_none(EmailList, domain='domain.com'): 
    ...do something 
elif get_or_none(EmailList, domain='domain.com'): 
    ...do something 
else: 
    ...do something 

As Ignacio mentioned in his answer 당신은 항상 명시하고 의도에만 예외를 포착해야한다 : CH는 당신에게 약간 더 읽을 수있는 코드를 제공합니다.

6

중첩 된 try/except 블록. 그리고 베어 키 (except)를 사용하지 마십시오. 처리 할 수있는 예외 만 잡으십시오.

+1

이 경우에는 원하는 예외가'EmailList.DoesNotExist' 인 것처럼 보입니다. –

관련 문제