python出现全局名称错误

2024-05-19 13:59:44 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我在启动python时遇到了这个错误。你知道吗

 def CheckMail(mail):
      if re.match("[^@]+@[^@]+\.[^@]+" , mail):
           correo = mail 
      else:
           print "Ingrese el formato correcto para el correo: "
           mail = raw_input()
           CheckMail(mail)

当我调用函数时,它是真的没有问题,但是当我调用函数并转到else时,给我

NameError: global name 'CheckMail' is not defined

我确信错误是当我调用递归时,我不知道是什么导致了错误。你知道吗

谢谢!你知道吗

编辑:添加实际代码


Tags: reifdefmatch错误mailelelse
1条回答
网友
1楼 · 发布于 2024-05-19 13:59:44

函数位于类中:

class myclass(object):
    def CheckMail(mail):
          if re.match("[^@]+@[^@]+\.[^@]+" , mail):
               correo = mail 
          else:
               print "Ingrese el formato correcto para el correo: "
               mail = raw_input()
               CheckMail(mail)

我不知道你的应用程序是什么(也不知道班上其他同学长什么样)。看起来这需要是一个方法,correo是对象状态的一部分。如果是这样的话:

方法的def应该是:

def CheckMail(self, mail):

调用obj.CheckMail(m)时,它会传递一个对“self”的引用,以便类知道它正在处理哪个对象。你知道吗

你的定义应该是:

self.correo = mail

我假设您在对象中存储correo是出于某种目的。你知道吗

要从类中调用类方法,应该是:

self.CheckMail(mail)

这将调用CheckMail并将相同的对象传递到函数中。由于CheckMail不作为全局名称存在,因此引发了错误。但是有一个myclass.CheckMail功能。要调用该函数,需要使用self(或myclass的另一个obj)。你知道吗

如果这确实是您遇到的问题,我强烈建议您查看https://docs.python.org/2/tutorial/classes.html。这是一个非常好的简要概述类语法如何在python中工作。你知道吗

相关问题 更多 >