Python的try/except函数总是返回假

3 投票
5 回答
11259 浏览
提问于 2025-04-15 19:52

我正在尝试找出这段简短代码中的问题。任何帮助都将不胜感激。不管我把 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() 只是一个用来检查电子邮件地址格式的方法。

谢谢。

5 个回答

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
1

其实你有两个值。

  • 0
  • None

如果你打印这个值,而不是在条件判断里用它,你就能看到这两个情况。可以考虑加一些打印语句,看看这个值到底是什么。

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

如果这个条件为真,你会得到 0

如果这个条件为假,你会得到 None

而这个异常会给你 0

5

你没有在函数的正面情况中加上一个 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

撰写回答