2012-01-31 55 views
-1

我正在寫一個模塊,在其中電子郵件字符串被插入到數據庫之前被驗證。當我嘗試輸入無效的電子郵件字符串時,它會輸出錯誤的電子郵件,但是當我輸入正確的電子郵件字符串時,它不會執行任何操作。這裏是代碼:這個Python代碼有什麼問題? if塊沒有被執行

#!/usr/bin/python 

import MySQLdb 
import re 
# Open database connection 
db = MySQLdb.connect("localhost","root","root","acl") 

# prepare a cursor object using cursor() method 
cursor = db.cursor() 

def addUser(email,password): 

    try: 
     if validateEmail(email): 
      sql = "INSERT INTO acl_users(email, password) VALUES ('%s', '%s')" % (email, password) 
       # Execute the SQL command 
      cursor.execute(sql) 
       # Commit your changes in the database 
      db.commit() 
     else: 
      print "wrong email" 
    except Exception as inst: 
# Rollback in case there is any error 
    db.rollback() 
    print inst 

def validateEmail(email): 

    if len(email) > 7: 
     if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) != None: 
      return True 
     else: 
      return False 
    else: 
     return False 

有什麼建議嗎?

編輯-1

得到了答案的傢伙!在除了block之外創建異常的實例後,我知道導入重新丟失了。解決了這個問題。

+6

很明顯,你用'try/except'塊隱藏了一個有用的異常。這正是你不應該捕捉所有例外的原因。 – 2012-01-31 22:11:52

+2

首先,你有沒有理由使用1和0來代替Built in'True'和'False'?如果我們能看到正確電子郵件的例子,這將有所幫助。 – mklauber 2012-01-31 22:12:47

+0

好..你有一點我現在試着用它。我編輯了我的問題,以便您可以查看我的最新代碼。 – Maverick 2012-01-31 22:18:09

回答

0

在validateEmail中你使用了模塊re,但是你沒有導入它。

-2

我會打印出異常,看看它爲什麼失敗。

+2

這在評論部分更適合。 – RanRag 2012-01-31 22:13:40

+0

對不起,昨天我被告知評論是不好的形式,如果它是答案。我會弄清楚:-)謝謝。 – 2012-01-31 22:19:36

-2

是否有可能在if塊中引發異常?將一個print語句放在except塊中以檢查它。

此外通常是一個壞主意,有一個全面的除了塊。如果你正在預測數據庫錯誤,那麼有一個能夠捕捉它們的除外塊。

+0

嗯...好吧...對於錯誤的電子郵件地址,else塊正在打印......並且sql在沒有if else語句的情況下執行。 – Maverick 2012-01-31 22:21:46