调用类中函数的内部函数| Python&;数据库
我试图将.txt文件中的数据插入SQLite数据库,但每当我运行代码时,都会出现以下错误:调用类中函数的内部函数| Python&;数据库,python,sqlite,Python,Sqlite,我试图将.txt文件中的数据插入SQLite数据库,但每当我运行代码时,都会出现以下错误:NameError:name“get\u value”未定义。这是因为我试图调用类内函数中的函数吗?我没有包括我的代码的其他部分,因为我认为它们是不必要的,但如果它们是让我知道,我会添加它 Python文件: class InputFromIPLog: ... def get_value(): info = item.strip().split(':')
NameError:name“get\u value”未定义
。这是因为我试图调用类内函数中的函数吗?我没有包括我的代码的其他部分,因为我认为它们是不必要的,但如果它们是让我知道,我会添加它
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,))
...
新的_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
这里有一页介绍了self及其使用方法
就我对您的问题的有限看法而言,下面的方法可能会奏效:
类InputFromIPLog:
...
def get_值(自身,项目):
info=item.strip().split(“:”)
val=info[1].strip().split(',')
返回值[0]。条带()
def插入_数据(自身):
将open(f“new_iplog.txt”,“r”)作为f:
file_data=f.readlines()
输入_gamertag=“”
input_ip_address=“”
输入_xuid=“”
输入_mid=“”
对于文件\u数据中的项目:
如果项目中有“玩家代号”:
输入\玩家代号=自我。获取\值(项目)
elif项目中的“IP地址”:
输入\u ip\u地址=自身。获取\u值(项目)
项目中的elif“XUID”:
input_xuid=self.get_值(项目)
项目中的elif“MID”:
输入\u mid=self.get\u值(项目)
cursor.execute(“插入userinfo(gamertag、ip、xuid、mid)值(?、、?)”,
(输入玩家代号、输入ip地址、输入xuid、输入mid)
...
另外,在您的代码中,
get\u value
不接受任何参数,但当您使用它时,会将item
传递给它。我已经更新了上面代码中函数的参数,以反映您的使用情况。我找不到重复项,但确实存在重复项,因此我不会发布答案。您需要self.get_value
来引用该方法。方法名称本身不在作用域中。您需要在类的实例上显式调用该方法(在本例中为self
)。这是一个骗局,可以解释,但这是一个可怕的骗局。