在类内部的函数内部调用函数 | Python & SQLite

时间:2021-03-29 22:12:29

标签: python sqlite

我正在尝试将 .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

...

1 个答案:

答案 0 :(得分:1)

我不知道您是否还有其他属性与该类的实例相关联,但通常要访问类的方法和属性,您应该使用 self

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

由于我对您的问题的看法有限,以下内容可能会奏效:

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 传递给它。我已经更新了上面代码中函数的参数以反映您的使用情况。

相关问题