Python: AttributeError: 'str' object has no attribute when calling a method inside for loop
Python: AttributeError: 'str' object has no attribute when calling a method inside for loop
当我尝试使用由 for 循环生成的名称访问 class 实例时,我得到
"AttributeError: 'str' object has no attribute".
我是 Python 的新手,请原谅 "Not the best practice"。感谢任何帮助
class Csv:
def __init__(self, invoicenum, customer, invoicedate, duedate, description, amount, productservice, invoiceclass):
self.invoicenum = invoicenum
self.customer = customer
self.invoicedate = invoicedate
self.duedate = duedate
self.description = description
self.amount = amount
self.productservice = productservice
self.invoiceclass = invoiceclass
self.line = '{},{},{},{},{},{},{},{}\n'.format(invoicenum, customer, invoicedate,
duedate, description, amount, productservice, invoiceclass)
def wite_to_db(self):
mydb = mysql.connector.connect(host="localhost", user="root",
passwd="passwd", database="invoice")
mycursor = mydb.cursor()
sql = "insert into invoice " "(Invoice_no, Customer, Invoice_Date, Due_date, Description, Amount, Product_service, Class)" "VALUES (%s,%s,%s,%s,%s,%s,%s,%s)"
val = (self.invoicenum, self.customer, self.invoicedate, self.duedate,
self.description, self.amount, self.productservice, self.invoiceclass)
mycursor.execute(sql, val)
mydb.commit()
x0 = Csv("1355", "Test1 User", "2020-05-03", "2020-12-31", 7095, 300, "Tithe", "General Fund")
x1 = Csv("1124", "Test2 User", "2020-05-03", "2020-12-31", 7095, 300, "Tithe", "General Fund")
x2 = Csv("14432", "Test3 User", "2020-05-03", "2020-12-31", 7095, 300, "Tithe", "General Fund")
x3 = Csv("1312", "Test4 User", "2020-05-03", "2020-12-31", 7095, 300, "Tithe", "General Fund")
line_range = range(4)
for line in line_range:
line_instance = 'x' + str(line)
print(line_instance)
line_instance.write_to_db()
line_instance = 'x' + str(line)
print(line_instance)
line_instance.write_to_db()
这是错误的。字符串没有 write_to_db
方法。您在 Csv
class 中定义了此方法(或者更确切地说是名称非常相似的 wite_to_db
...),但 line_instance
显然是此处的字符串,而不是 [=14 的实例=] class。您可能想要做的是:
for line_instance in (x0, x1, x2, x3):
line_instance.write_to_db()
你所做的是当你创建 line_instance
变量时,你把它变成了一个字符串,然后几行之后你基本上尝试 运行 你的 Csv 中的函数 class - write_to_db
在一个字符串上。这就是错误发生的原因。
我可以推荐的做法如下:
x0 = Csv(...
x1 = Csv(...
x2 = Csv(...
x3 = Csv(...
x_list = [x0, x1, x2, x3]
for x in x_list:
x.write_to_db()
旁注,您在 Csv class
中的“wite_to_db
”函数定义中有错字
line_instance 是一个 str。
str 没有调用 write_to_db
的函数
我将 class 个实例分配给了一个列表,并且能够为遍历它的实例调用该方法。你们都很棒。
当我尝试使用由 for 循环生成的名称访问 class 实例时,我得到
"AttributeError: 'str' object has no attribute".
我是 Python 的新手,请原谅 "Not the best practice"。感谢任何帮助
class Csv:
def __init__(self, invoicenum, customer, invoicedate, duedate, description, amount, productservice, invoiceclass):
self.invoicenum = invoicenum
self.customer = customer
self.invoicedate = invoicedate
self.duedate = duedate
self.description = description
self.amount = amount
self.productservice = productservice
self.invoiceclass = invoiceclass
self.line = '{},{},{},{},{},{},{},{}\n'.format(invoicenum, customer, invoicedate,
duedate, description, amount, productservice, invoiceclass)
def wite_to_db(self):
mydb = mysql.connector.connect(host="localhost", user="root",
passwd="passwd", database="invoice")
mycursor = mydb.cursor()
sql = "insert into invoice " "(Invoice_no, Customer, Invoice_Date, Due_date, Description, Amount, Product_service, Class)" "VALUES (%s,%s,%s,%s,%s,%s,%s,%s)"
val = (self.invoicenum, self.customer, self.invoicedate, self.duedate,
self.description, self.amount, self.productservice, self.invoiceclass)
mycursor.execute(sql, val)
mydb.commit()
x0 = Csv("1355", "Test1 User", "2020-05-03", "2020-12-31", 7095, 300, "Tithe", "General Fund")
x1 = Csv("1124", "Test2 User", "2020-05-03", "2020-12-31", 7095, 300, "Tithe", "General Fund")
x2 = Csv("14432", "Test3 User", "2020-05-03", "2020-12-31", 7095, 300, "Tithe", "General Fund")
x3 = Csv("1312", "Test4 User", "2020-05-03", "2020-12-31", 7095, 300, "Tithe", "General Fund")
line_range = range(4)
for line in line_range:
line_instance = 'x' + str(line)
print(line_instance)
line_instance.write_to_db()
line_instance = 'x' + str(line)
print(line_instance)
line_instance.write_to_db()
这是错误的。字符串没有 write_to_db
方法。您在 Csv
class 中定义了此方法(或者更确切地说是名称非常相似的 wite_to_db
...),但 line_instance
显然是此处的字符串,而不是 [=14 的实例=] class。您可能想要做的是:
for line_instance in (x0, x1, x2, x3):
line_instance.write_to_db()
你所做的是当你创建 line_instance
变量时,你把它变成了一个字符串,然后几行之后你基本上尝试 运行 你的 Csv 中的函数 class - write_to_db
在一个字符串上。这就是错误发生的原因。
我可以推荐的做法如下:
x0 = Csv(...
x1 = Csv(...
x2 = Csv(...
x3 = Csv(...
x_list = [x0, x1, x2, x3]
for x in x_list:
x.write_to_db()
旁注,您在 Csv class
中的“wite_to_db
”函数定义中有错字
line_instance 是一个 str。 str 没有调用 write_to_db
的函数我将 class 个实例分配给了一个列表,并且能够为遍历它的实例调用该方法。你们都很棒。