2010-03-01 3 views
2

Я пытаюсь выяснить проблему в этом коротком параграфе кода. Любая помощь будет оценена по достоинству. Независимо от того, что я укажу User.email, он всегда возвращает false.Python try/except ... function всегда возвращает false

def add(self): 

    #1 -- VALIDATE EMAIL ADDRESS 
    #Check that e-mail has been completed 
    try: 
     #Validate if e-mail address is in correct format 
     if (isAddressValid(self.email) == 0): 
      self.errors['email'] = 'You have entered an invalid e-mail address'; 
      return 0 

    except NameError: 
     self.errors['email'] = 'Please enter your e-mail' 
     return 0 

>>> u = User() 
>>> u.email = '[email protected]' 
>>> u.add() 
0 
>>> print u.errors 
{'email': 'Please enter your e-mail'} 

Я подтвердил, что возвращенное ложное происходит из-за имени NameError.

Кроме того, isAddressValid() - это всего лишь метод проверки структуры адреса электронной почты.

Спасибо.

+2

SO 'isAddressValid' всегда бросает 'NameError', правильно? Вы должны решить проблему, как описано ниже, но настоящая проблема заключается в 'isAddressValid'. – hughdbrown

+0

Да, это была такая простая проблема. Я забыл поставить self.isAddressValid() – ensnare

ответ

4

Вы не включили return заявления о положительном случае ... Кроме того, если функция не включает в себя return заявления, абонент получает None вместо ...

def add(self): 

    #1 -- VALIDATE EMAIL ADDRESS 
    #Check that e-mail has been completed 
    try: 
     #Validate if e-mail address is in correct format 
     if (isAddressValid(self.email) == 0): 
      self.errors['email'] = 'You have entered an invalid e-mail address'; 
      return False 

    except NameError: 
     self.errors['email'] = 'Please enter your e-mail' 
     return False 

    return True 
1

Фактически у вас есть два значения.

  • 0
  • None

Если вы печатаете значение вместо того, чтобы использовать его в IF-заявление, вы увидите два условия. Рассмотрите возможность добавления операторов печати, чтобы узнать, что такое значение.

if (isAddressValid(self.email) == 0): 

Если это правда, вы получите 0.

Если это неверно, вы получите None.

И исключение составляют 0.

+0

Что это значит? Благодарю. – ensnare

+0

@ensnare: Я имею в виду ДОБАВИТЬ ПЕЧАТНЫЕ ЗАЯВЛЕНИЯ. Посмотрите, что значения.Я имею в виду, что ваш if-statement является неполным. Если вы ДОБАВЛЯЕТ ЗАПИСИ ПЕЧАТИ, вы увидите, как он неполный. –

+0

Получил это. Благодарю. – ensnare

0

Я не уверен, какие проблемы вы говорите, но вы всегда возвращаются 0

Try добавив пункт еще для случая действительных Email (который вы в настоящее время не рассматривает)

def add(self): 

#1 -- VALIDATE EMAIL ADDRESS 
#Check that e-mail has been completed 
try: 
    #Validate if e-mail address is in correct format 
    if (isAddressValid(self.email) == 0): 
     self.errors['email'] = 'You have entered an invalid e-mail address'; 
     return 0 
    else 
     return 1 

except NameError: 
    self.errors['email'] = 'Please enter your e-mail' 
    return 0 
0

Вы сказали isAddressValid это метод, не так ли? Поскольку add также метод, возможно, вы должны предварять self.:

if (self.isAddressValid(self.email) == 0): 

Это, скорее всего, будет иметь дело с NameError.

После этого, добавьте else положение, когда проверка успешна:

… 
    self.errors['email'] = 'You have entered an invalid e-mail address' 
    return 0 
else: 
    return 1 
1

Если бы я вновь пишу этот код, я бы что-то вроде этого:

def add(self): 
    try: 
     if not isAddressValid(self.email): 
      self.errors['email'] = 'You have entered an invalid e-mail address'; 
    except NameError: 
     self.errors['email'] = 'Please enter your e-mail' 
    return 'email' not in self.errors 
Смежные вопросы