2010-03-01 85 views
2

我试图找出这段代码中的问题。任何帮助,将不胜感激。无论我指定User.email为何,它总是返回false。Python尝试/除...函数总是返回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

所以'isAddressValid'总是抛出一个'NameError',对吧?您应该像其他人在下面描述的那样解决问题,但真正的问题在于'isAddressValid'。 – hughdbrown 2010-03-01 15:18:25

+0

是的,这是一个很简单的问题。我忘了把self.isAddressValid() – ensnare 2010-03-02 02:28:00

回答

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 2010-03-01 14:54:24

+0

@ensnare:我的意思是ADD PRINT STATEMENTS。看看这些值是什么。我的意思是你的if语句不完整。如果您添加打印声明,您会看到它不完整。 – 2010-03-01 16:15:32

+0

明白了。谢谢。 – ensnare 2010-03-01 16:19:08

0

林不知道有什么问题,你在说什么,但你总是返回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 
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