【问题标题】:Calling a Function Inside of a Function Inside of a Class | Python & SQLite在类内部调用函数内部的函数 | Python 和 SQLite
【发布时间】:2021-06-25 23:02:59
【问题描述】:

我正在尝试将 .txt 文件中的数据插入 SQLite 数据库,但每当我运行我的代码时,我都会收到此错误:NameError: name 'get_value' is not defined。这是因为我试图在类内部的函数中调用函数吗?我没有包含我的代码的其他部分,因为我认为它们不是必需的,但是如果需要,请告诉我,我会添加它。

Python 文件:

class InputFromIPLog:
    
    ...

    def get_value():
        info = item.strip().split(':')
        val = info[1].strip().split(',')
        return val[0].strip()

    def insert_data():
        with open(f"new_iplog.txt", "r") as f:
            file_data = f.readlines()

        input_gamertag = ""
        input_ip_address = ""
        input_xuid = ""
        input_mid = ""

        for item in file_data:
            if "Gamertag" in item:
                input_gamertag = get_value(item)
            elif "IP Address" in item:
                input_ip_address = get_value(item)
            elif 'XUID' in item:
                input_xuid = get_value(item)
            elif 'MID' in item:
                input_mid = get_value(item)

        cursor.execute("INSERT INTO userinfo (gamertag, ip, xuid, mid) values(?, ?, ?)", (input_gamertag, input_ip_address, input_xuid, input_mid,))

...

new_iplog.txt 文件:

...

Gamertag: UnknownUser                       
IP Address: 10.0.0.1
XUID: 000301F23B9F6ED4
MID: FB00FDA037CEB46E

Gamertag: AnotherUnknownUser                   
IP Address: 1.1.1.1
XUID: 0009000005E96E9B
MID: FB00F5413910FEDD

...

【问题讨论】:

  • 我找不到骗子,但肯定存在,所以我不会发布答案。您需要self.get_value 来引用该方法。方法名称本身不在范围内。您需要在类的实例上显式调用该方法(在这种情况下为self)。
  • This 是一个解释它的骗子,但这是一个可怕的骗子。

标签: python sqlite


【解决方案1】:

我不知道你是否有其他属性绑定到这个类的实例,但通常要访问一个类的方法和属性,你应该使用self

这是一个Intro to Designing Classes 页面,其中介绍了自我及其使用方式。

由于我对您的问题的看法有限,下面的方法可能会起作用:

class InputFromIPLog:
    ...

    def get_value(self, item):
        info = item.strip().split(':')
        val = info[1].strip().split(',')
        return val[0].strip()

    def insert_data(self):
        with open(f"new_iplog.txt", "r") as f:
            file_data = f.readlines()

        input_gamertag = ""
        input_ip_address = ""
        input_xuid = ""
        input_mid = ""

        for item in file_data:
            if "Gamertag" in item:
                input_gamertag = self.get_value(item)
            elif "IP Address" in item:
                input_ip_address = self.get_value(item)
            elif 'XUID' in item:
                input_xuid = self.get_value(item)
            elif 'MID' in item:
                input_mid = self.get_value(item)

        cursor.execute("INSERT INTO userinfo (gamertag, ip, xuid, mid) values(?, ?, ?)",
                       (input_gamertag, input_ip_address, input_xuid, input_mid,))


...

另外,在您的代码中,get_value 不带任何参数,但是当您使用它时,您会将 item 传递给它。我已经更新了上面代码中函数的参数以反映您的使用情况。

【讨论】:

    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多