【问题标题】:what is wrong with this python code? the if block is not getting executed这个 python 代码有什么问题? if 块没有被执行
【发布时间】:2012-02-23 15:42:14
【问题描述】:

我正在编写一个模块,其中电子邮件字符串在插入数据库之前经过验证。当我尝试输入无效的电子邮件字符串时,它会打印带有错误电子邮件消息的 else 块,但是当我输入正确的电子邮件字符串时,它不会做任何事情。代码如下:

   #!/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

有什么建议吗?

edit-1

得到答案,伙计们!在 except 块中创建异常实例后,我知道 import re 丢失了。解决了这个问题。

【问题讨论】:

  • 显然,您在 try/except 块中隐藏了一个有用的异常。这正是您不应该捕获所有异常的原因。
  • 首先,您使用 1 和 0 而不是内置的 TrueFalse 是否有原因?如果我们能看到正确电子邮件的示例,那将会有所帮助。
  • 好吧..你明白了我现在尝试过的一点。我已经编辑了我的问题,所以你可以在那里查看我的最新代码。

标签: python python-2.7 python-module


【解决方案1】:

在 validateEmail 中你使用了模块 re,但你没有导入它。

【讨论】:

    【解决方案2】:

    我会打印出异常并查看它失败的原因。

    【讨论】:

    • 这个比较适合放在评论区。
    • 嗯,对不起,昨天有人告诉我 cmets 是错误的形式,如果它是答案的话。我会弄清楚的 :-) 谢谢。
    【解决方案3】:

    是否有可能在 if 块中抛出异常?将 print 语句放在 except 块中进行检查。

    另外,拥有一个 catch-all except 块通常是个坏主意。如果您预期数据库错误,则使用 except 块来捕获它们。

    【讨论】:

    • hmm...好吧...对于错误的电子邮件地址,正在打印 else 块...并且在没有 if else 语句的情况下执行 sql。
    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多