【问题标题】:Python try/except ... function always returns falsePython try/except ...函数总是返回false
【发布时间】:2011-01-22 07:55:30
【问题描述】:

我试图找出这段代码中的问题。任何帮助,将不胜感激。无论我指定 User.email 是什么,它总是返回 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 = 'test@example.com'
>>> u.add()
0
>>> print u.errors
{'email': 'Please enter your e-mail'}

我已经确认返回的 false 来自除了 NameError。

另外,isAddressValid() 只是一种检查电子邮件地址结构的方法。

谢谢。

【问题讨论】:

  • 所以isAddressValid 总是抛出NameError,对吧?您应该像其他人在下面描述的那样解决问题,但真正的问题在于isAddressValid
  • 是的,这是一个如此简单的问题。我忘了把 self.isAddressValid()

标签: python pylons


【解决方案1】:

实际上你有两个值。

  • 0
  • None

如果您打印该值而不是在 if 语句中使用它,您将看到这两个条件。考虑添加打印语句以查看实际值是什么。

if (isAddressValid(self.email) == 0):

如果这是真的,你会得到0

如果这是 False,您将获得 None

并且例外给0

【讨论】:

  • @ensnare:我的意思是添加打印声明。看看值是多少。我的意思是您的 if 语句不完整。如果您添加打印语句,您会看到它是如何不完整的。
【解决方案2】:

您没有为肯定情况包含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

【讨论】:

    【解决方案3】:

    我不确定你在说什么问题,但你总是返回 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
    

    【讨论】:

      【解决方案4】:

      你说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
      

      【讨论】:

        【解决方案5】:

        如果我要重写这段代码,我会这样做:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多