Python попытка / кроме ... функция всегда возвращает ложь - PullRequest
3 голосов
/ 01 марта 2010

Я пытаюсь выяснить проблему в этом коротком абзаце кода. Любая помощь будет оценена. Независимо от того, что я указываю для User.email, он всегда возвращает 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 = 'test@example.com'
>>> u.add()
0
>>> print u.errors
{'email': 'Please enter your e-mail'}

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

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

Спасибо.

Ответы [ 5 ]

5 голосов
/ 01 марта 2010

Вы не включили оператор 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 голос
/ 02 марта 2010

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

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
1 голос
/ 01 марта 2010

На самом деле у вас есть два значения.

  • 0
  • None

Если вы напечатаете значение вместо использования его в операторе if, вы увидите два условия. Попробуйте добавить операторы print, чтобы узнать, каково значение на самом деле.

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

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

Если это Ложь, вы получите None.

И исключение дают 0.

0 голосов
/ 02 марта 2010

Вы сказали, 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
0 голосов
/ 01 марта 2010

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

Попробуйте добавить условие else для случая действительного электронного письма (которое вы в настоящее время не рассматриваете)

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