即使它是python3函数也没有定义

时间:2015-02-21 00:33:21

标签: python function python-3.x

当我尝试调用changeProfile函数时,我不断收到错误“getAuthCode未定义”,即使它已明确定义。为什么我一直收到这个错误?我究竟做错了什么?它曾经是我记忆中的工作,但现在突然之间却没有。任何帮助将不胜感激:)

import os,re,json,socket,random,select,threading,time,sys
import urllib.request as urlreq
from urllib.request import quote,unquote
import urllib.parse
class miscellanous:
    """Main class."""
    def __init__():
        """What to do on initalizing."""
        pass
    def getAuthCode(u, p):
        """Get authentification code from username and password specified."""
        try:
            data=urllib.request.urlopen('http://chatango.com/login',urllib.parse.urlencode({'user_id': u, 'password': p, 'storecookie': 'on', 'checkerrors': 'yes'}).encode()).headers
        except Exception as e: print("Error: Auth request: %s" % e)
        for x, y in data.items():
            if x.lower() == 'set-cookie':
                returned = re.compile(r"auth\.chatango\.com ?= ?([^;]*)", re.IGNORECASE).search(y)
                if returned:
                    ret = returned.group(1)
                    if ret == "": raise ValueError("Error: Unable to get auth: Error in username/password.")
                    return ret


    def createAccount(u, p):
        """Create an account with the username and password specified."""
        try:
            resp=urllib.request.urlopen("http://chatango.com/signupdir", urllib.parse.urlencode({"email": "accmaker"+str(random.randrange(1,1000000000000))+"@hotmail.com", "login": u, "password": p, "password_confirm": p, "storecookie": "on", "checkerrors": "yes"}).encode())
            fu=str(resp.read())
            resp.close()
            if "screen name has been" in fu: r = "Error: User could not be created: Already exists."
            else: r = "The user was created. If it didn't work, try another username."
            return r
        except: return "Error: Invalid or missing arguments."
    def createGroup(u, p, g, d="Description.", m="Owner message."):
        """Creates a group with the username, password, group name, description and owner message specified."""
        try:
            g=g.replace(" ","-")
            resp=urllib.request.urlopen("http://chatango.com/creategrouplogin",urllib.parse.urlencode({"User-Agent": "Mozilla/5.0", "uns": "0", "p": p, "lo": u, "d": d, "u": g, "n": m}).encode())
            fu=str(resp.read())
            resp.close()
            if "groupexists" in fu: r = "Error: Group could not be created: Already exists."
            else: r = "The group was created. If it didn't work, try another group name. Click <a href='http://%s.chatango.com/' target='_blank'>[[here]]<a> to get to the new group."
            return r
        except: return "Error: Invalid or missing arguments."
    def changeProfile(u, p, m="Default", e="accmaker"+str(random.randrange(1,1000000000000))+"@hotmail.com", l="Norway", g="M", a="18"):
        try:
            resp = urlreq.urlopen('http://'+u.lower()+'.chatango.com/updateprofile?&d&pic&s='+getAuthCode(u, p), urllib.parse.urlencode({"show_friends": "checked", "dir": "checked", "checkerrors": "yes", "uns": "1", "line": m, "email": e, "location": l, "gender": g, "age": a}).encode())
            return "The profile change was successful."
        except Exception as e:
            return "%s" % e
    def checkOnlineStatus(u):
        """Check if the predefined username is online or offline."""
        if "Chat with" in urlreq.urlopen("http://"+u.lower()+".chatango.com").read().decode(): return '<b><font color="#00ff00">Online</font></b>'
        else: return "<b><font color='#ff0000'>Offline</font></b>"
        resp.close()
    def checkUserGender(u):
        """Get the gender for the predefined username."""
        resp=urlreq.urlopen("http://st.chatango.com/profileimg/%s/%s/%s/mod1.xml" % (u.lower()[0], u.lower()[1], u.lower()))
        try: ru=re.compile(r'<s>(.*?)</s>', re.IGNORECASE).search(resp.read().decode()).group(1)
        except: ru="?"
        ret=unquote(ru)
        resp.close()
        if ret=="M": r="Male"
        elif ret=="F": r="Female"
        elif ret=="?": r="Not specified"        
        return r
    def changeBackGround(u, p, x, transparency=None):
        """Update the user's bg using the predefined username, password and bg color."""
        color=quote(x.split()[0])
        try: image=x.split()[1]
        except: image=None
        if color and len(color)==1:
            color=color*6
        if color and len(color)==3:
            color+=color
        elif color and len(color)!=6:
            return False
        if transparency!=None and abs(transparency)>1:
            transparency = abs(transparency) / 100
        data=urllib.request.urlopen("http://fp.chatango.com/profileimg/%s/%s/%s/msgbg.xml" % (u[0], u[1], u.lower())).read().decode()
        data=dict([x.replace('"', '').split("=") for x in re.findall('(\w+=".*?")', data)[1:]])
        data["p"]=p
        data["lo"]=u
        if color: data["bgc"] = color
        if transparency!=None: data["bgalp"]=abs(transparency) * 100
        if image!=None: data["useimg"]=1 if bool(image) else 0
        data12=urllib.parse.urlencode(data)
        data13=data12.encode()
        der=urllib.request.urlopen("http://chatango.com/updatemsgbg", data13).read()
    def checkIfGroupExists(g):
        """Check if the predefined group exists."""
        i = urlreq.urlopen('http://'+g+'.chatango.com').read().decode()
        if '<table id="group_table"' in i: return True#"This chat does exist!"
        else: return False#"This chat doesn't exist."
        i.close()

2 个答案:

答案 0 :(得分:1)

您显示的所有功能都是miscellaneous类的一部分,因此要访问它们,您需要在它们前面加上类名。要参考getAuthCode功能,您需要使用miscellaneous.getAuthCode

但是,看起来你真的应该在这里使用一堂课了。您永远不会创建miscellaneous的实例,也不会将这些函数设置为以方法形式运行。所以,正确的答案可能是摆脱文件顶部的class miscellaneous:声明,然后取消所有函数的一个级别。

(注意,在Python 2中,如果你保留了类,你还有一个额外的问题:未绑定的方法要求他们的第一个参数是他们的类(或子类)的实例。在这种情况下,你&#39 ; d需要在任何不希望得到实例的函数上使用staticmethod装饰器。)

答案 1 :(得分:0)

Python类中的函数称为方法。它们通常在其他参数之前采用self参数。此外,方法不能&#34;看&#34;彼此直接;您需要将其称为self.method(args),而不仅仅是method(args)