2012-01-31 3 views
-1

전자 메일 문자열이 db에 삽입되기 전에 유효성이 검사되는 모듈을 작성하고 있습니다. 내가 틀린 전자 메일 문자열을 입력하려고하면 잘못된 전자 메일 메시지로 블록을 인쇄하지만 올바른 전자 메일 문자열을 입력하면 아무것도하지 못합니다.이 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

답을 얻었습니다! 블록을 제외하고 예외의 인스턴스를 만든 후에 가져 오기가 누락되었음을 알게되었습니다. 문제를 해결했습니다.

+6

분명히 'try/except' 블록으로 유용한 예외를 숨기고있는 것입니다. 이것이 바로 모든 예외를 포착해서는 안되는 이유입니다. –

+2

먼저, 'True'와 'False'로 구성된 대신에 1과 0을 사용하는 이유가 있습니까? 올바른 이메일의 예를 볼 수 있다면 도움이 될 것입니다. – mklauber

+0

음 .. 너와 내가 지금 시험해 본 점이있어. 제 질문을 편집하여 최신 코드를 확인할 수 있습니다. – Maverick

답변

0

의 validateEmail에서 모듈 re를 사용하지만 가져 오지 않았습니다.

-2

예외를 인쇄하여 실패한 이유를 확인합니다.

+2

댓글 섹션에 더 적합합니다. – RanRag

+0

흠, 어제 죄송합니다. 답변 일 경우 의견이 잘못되었다고 들었습니다. 나는 그것을 알아낼 것이다 :-) 고마워. –

-2

if 블록에 예외가 발생할 수 있습니까? print 문을 except 블록에 두어 확인하십시오.

또한 캐치 올 예외 블록을 사용하는 것은 일반적으로 바람직하지 않습니다. 데이터베이스 오류를 예상하는 경우이를 catch하는 except 블록이 있어야합니다.

+0

음 ... 음 ... 잘못된 이메일 주소에 대해서는 else 블록이 인쇄되고 ... SQL은 if else 문없이 실행됩니다. – Maverick

관련 문제