Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未在python中定义全局名称_Python - Fatal编程技术网

未在python中定义全局名称

未在python中定义全局名称,python,Python,我得到一个名称错误:没有定义全局名称“valid\u username”,这让我很困惑。为什么会这样?我在实际调用之前声明了有效的_username函数,那么问题出在哪里 以下是代码完整代码: import webapp2 import cgi import re class WelcomeHandler(webapp2.RequestHandler): def get(self): self.response.out.write("Welcome, ") clas

我得到一个名称错误:没有定义全局名称“valid\u username”,这让我很困惑。为什么会这样?我在实际调用之前声明了有效的_username函数,那么问题出在哪里

以下是代码完整代码:

import webapp2
import cgi
import re

class WelcomeHandler(webapp2.RequestHandler):
    def get(self):
        self.response.out.write("Welcome, ")


class MainPage(webapp2.RequestHandler):
    def write_form(self, username="", username_error="", password_error="", verify_password_error="", email="",
                   email_error=""):
        self.response.out.write(form % {
            "username": username, "username_error": username_error,
            "password_error": password_error,
            "verify_password_error": verify_password_error,
            "email": email, "email_error": email_error})

    def checkEscaped(text):
        return cgi.escape(text, quote="True")

    def valid_username(username):
        USER_RE = re.compile(r"^[a-zA-Z0-9_-]{3,20}$")
        return USER_RE.match(checkEscaped(username))

    def valid_password(password):
        PASSWORD_RE = re.compile(r"^.{3,20}$")
        return PASSWORD_RE.match(checkEscaped(password))

    def valid_email(email):
        if len(email) > 0:
            EMAIL_RE = re.compile(r"^[\S]+@[\S]+\.[\S]+$")
            return EMAIL_RE.match(checkEscaped(email))
        else:
            return True

    def password_match(password, confirmPassword):
        return password == confirmPassword

    def get(self):
        self.write_form()

    def post(self):
        input_username = self.request.get('username')
        input_password = self.request.get('password')
        input_verify_password = self.request.get('verify_password')
        input_email = self.request.get('email')

        username_error = ""
        is_valid_name = valid_username(input_username)
        if not is_valid_name:
            username_error = "That's not a valid username."

        password_error = ""
        is_valid_password = valid_password(input_password)
        if not is_valid_password:
            password_error = "That wasn't a valid password."

        verify_password_error = ""
        is_valid_verify_password = password_match(input_password, input_verify_password)
        if not is_valid_verify_password:
            verify_password_error = "the passwords don't match"

        email_error = ""
        is_valid_email = valid_email(input_email)
        if not is_valid_email:
            email_error = "that's not a valid email"

        if not (is_valid_name and is_valid_password and is_valid_verify_password and is_valid_email):
            self.write_form(name, username_error, password_error, verify_password_error, email, email_error)
        else:
            self.redirect("/welcome")


app = webapp2.WSGIApplication([
    ('/', MainPage), ('/welcome', WelcomeHandler)], debug=True)

您需要通过
self
对象引用实例上的方法:

is_valid_password = self.valid_password(input_password)
你在其他地方也有同样的问题
checkEscaped()
应该是
self.checkEscaped()
password\u match()
应该是
self.password\u match()
,等等

方法不是全局或局部

接下来,您的方法也应该接受
self
引用;您自己的每个方法都缺少必需的参数:

def checkEscaped(self, text):
    # ...

def valid_username(self, username):
    # ...

def valid_password(self, password):
    # ...

def valid_email(self, email):
    # ...

def password_match(self, password, confirmPassword):
    # ...

当然,您可以将这四个方法移出类,并实际使它们成为全局函数而不是方法。在这种情况下,请再次关闭
self
参数。

您需要通过
self
对象引用实例上的方法:

is_valid_password = self.valid_password(input_password)
你在其他地方也有同样的问题
checkEscaped()
应该是
self.checkEscaped()
password\u match()
应该是
self.password\u match()
,等等

方法不是全局或局部

接下来,您的方法也应该接受
self
引用;您自己的每个方法都缺少必需的参数:

def checkEscaped(self, text):
    # ...

def valid_username(self, username):
    # ...

def valid_password(self, password):
    # ...

def valid_email(self, email):
    # ...

def password_match(self, password, confirmPassword):
    # ...

当然,您可以将这四个方法移出类,并实际使它们成为全局函数而不是方法。在这种情况下,请再次关闭
self
参数。

您需要通过
self
对象引用实例上的方法:

is_valid_password = self.valid_password(input_password)
你在其他地方也有同样的问题
checkEscaped()
应该是
self.checkEscaped()
password\u match()
应该是
self.password\u match()
,等等

方法不是全局或局部

接下来,您的方法也应该接受
self
引用;您自己的每个方法都缺少必需的参数:

def checkEscaped(self, text):
    # ...

def valid_username(self, username):
    # ...

def valid_password(self, password):
    # ...

def valid_email(self, email):
    # ...

def password_match(self, password, confirmPassword):
    # ...

当然,您可以将这四个方法移出类,并实际使它们成为全局函数而不是方法。在这种情况下,请再次关闭
self
参数。

您需要通过
self
对象引用实例上的方法:

is_valid_password = self.valid_password(input_password)
你在其他地方也有同样的问题
checkEscaped()
应该是
self.checkEscaped()
password\u match()
应该是
self.password\u match()
,等等

方法不是全局或局部

接下来,您的方法也应该接受
self
引用;您自己的每个方法都缺少必需的参数:

def checkEscaped(self, text):
    # ...

def valid_username(self, username):
    # ...

def valid_password(self, password):
    # ...

def valid_email(self, email):
    # ...

def password_match(self, password, confirmPassword):
    # ...


当然,您可以将这四个方法移出类,并实际使它们成为全局函数而不是方法。在这种情况下,请再次关闭
self
参数。

并且大多数操作代码的方法定义也缺少
self
参数。@PM2Ring yes,您是对的。来自java——这些函数调用是隐式的there@nsmirosh:很公平。我们在Python中的OOP有点不同。但我相信你很快就会掌握窍门的。:)@PM2Ring为什么你需要在函数中到处传递“self”?@nsmirosh:你只需要在方法中传递这些,因为Python就是这样让你访问当前实例的。而且大多数操作代码的方法定义也缺少
self
args。@PM2Ring是的,你是对的。来自java——这些函数调用是隐式的there@nsmirosh:很公平。我们在Python中的OOP有点不同。但我相信你很快就会掌握窍门的。:)@PM2Ring为什么你需要在函数中到处传递“self”?@nsmirosh:你只需要在方法中传递这些,因为Python就是这样让你访问当前实例的。而且大多数操作代码的方法定义也缺少
self
args。@PM2Ring是的,你是对的。来自java——这些函数调用是隐式的there@nsmirosh:很公平。我们在Python中的OOP有点不同。但我相信你很快就会掌握窍门的。:)@PM2Ring为什么你需要在函数中到处传递“self”?@nsmirosh:你只需要在方法中传递这些,因为Python就是这样让你访问当前实例的。而且大多数操作代码的方法定义也缺少
self
args。@PM2Ring是的,你是对的。来自java——这些函数调用是隐式的there@nsmirosh:很公平。我们在Python中的OOP有点不同。但我相信你很快就会掌握窍门的。:)@PM2Ring为什么你需要在函数中到处传递“self”?@nsmirosh:你只需要在方法中传递这些,因为Python就是这样让你访问当前实例的。