2010-03-01 86 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