'NoneType' 尝试将包含 .write() 的变量附加到文件时出现 TypeError
'NoneType' TypeError when trying to append variable containing .write() to a file
我正在尝试将我写入的内容保存到变量中的文件中,然后将其附加到 wx.ListCtrl 小部件。但是我每次尝试都会得到 'NoneType' TypeError。
with open("birthday.txt", 'a') as database:
name = database.write(name_data + '\n')
mail = database.write(mail_data + '\n')
if int(month_data) < 10 and int(day_data) < 10:
date = database.write('0' + day_data + '/0' + month_data + '/' + year_data + '\n')
elif int(month_data) >= 10 and int(day_data) >= 10:
date = database.write(day_data + '/' + month_data + '/' + year_data + '\n')
elif int(month_data) < 10 and int(day_data) >= 10:
date = database.write(day_data + '/0' + month_data + '/' + year_data + '\n')
elif int(month_data) >= 10 and int(day_data) < 10:
date = database.write('0' + day_data + '/' + month_data + '/' + year_data + '\n')
database.write('\n')
index = self.list.InsertItem(sys.maxint, '1')
self.list.SetItem(index, 1, name) # Error message occurs here
self.list.SetItem(index, 2, mail)
self.list.SetItem(index, 3, date)
错误信息:
TypeError: ListCtrl.SetItem(): arguments did not match any overloaded call:
overload 1: argument 1 has unexpected type 'long'
overload 2: argument 3 has unexpected type 'NoneType'
写入文件不会 return 您在 python 中写入的内容。这是你的问题:
name = database.write(name_data + '\n')
mail = database.write(mail_data + '\n')
...
date = database.write('0' + day_data + '/0' + month_data + '/' + year_data + '\n')
这些写操作不会 return 任何东西,因此姓名、邮件和日期将始终是 None
。这就是你得到错误的原因。只需删除分配:
database.write(name_data + '\n')
相反,您可以在 SetItem
调用中使用原始变量,假设您已经在某处定义了它们。
index = self.list.InsertItem(sys.maxint, '1')
顺便问一下,为什么要传递这个 sys.maxint
而不是 0?我对wxpython了解不多。我会猜测并假设函数 returns 列表长度作为索引并将插入到末尾,而 0 将插入到开头。好吧,这里可能不重要。
无论如何,你可以将原始数据设置为项目:
self.list.SetItem(index, 1, name_data)
self.list.SetItem(index, 2, mail_data)
self.list.SetItem(index, 3, date_data)
好吧,你实际上并没有那样的 data_data
,但这是另一回事,我建议你查找如何使用 the datetime module 从字符串中解析日期数据。或者您可以按照与文件写入相同的方式进行操作。或者至少更好一点的是将数据保存到那里的一个变量中:
data_data = '0' + day_data + '/0' + month_data + '/' + year_data + '\n'
database.write(date_data)
我正在尝试将我写入的内容保存到变量中的文件中,然后将其附加到 wx.ListCtrl 小部件。但是我每次尝试都会得到 'NoneType' TypeError。
with open("birthday.txt", 'a') as database:
name = database.write(name_data + '\n')
mail = database.write(mail_data + '\n')
if int(month_data) < 10 and int(day_data) < 10:
date = database.write('0' + day_data + '/0' + month_data + '/' + year_data + '\n')
elif int(month_data) >= 10 and int(day_data) >= 10:
date = database.write(day_data + '/' + month_data + '/' + year_data + '\n')
elif int(month_data) < 10 and int(day_data) >= 10:
date = database.write(day_data + '/0' + month_data + '/' + year_data + '\n')
elif int(month_data) >= 10 and int(day_data) < 10:
date = database.write('0' + day_data + '/' + month_data + '/' + year_data + '\n')
database.write('\n')
index = self.list.InsertItem(sys.maxint, '1')
self.list.SetItem(index, 1, name) # Error message occurs here
self.list.SetItem(index, 2, mail)
self.list.SetItem(index, 3, date)
错误信息:
TypeError: ListCtrl.SetItem(): arguments did not match any overloaded call:
overload 1: argument 1 has unexpected type 'long'
overload 2: argument 3 has unexpected type 'NoneType'
写入文件不会 return 您在 python 中写入的内容。这是你的问题:
name = database.write(name_data + '\n')
mail = database.write(mail_data + '\n')
...
date = database.write('0' + day_data + '/0' + month_data + '/' + year_data + '\n')
这些写操作不会 return 任何东西,因此姓名、邮件和日期将始终是 None
。这就是你得到错误的原因。只需删除分配:
database.write(name_data + '\n')
相反,您可以在 SetItem
调用中使用原始变量,假设您已经在某处定义了它们。
index = self.list.InsertItem(sys.maxint, '1')
顺便问一下,为什么要传递这个 sys.maxint
而不是 0?我对wxpython了解不多。我会猜测并假设函数 returns 列表长度作为索引并将插入到末尾,而 0 将插入到开头。好吧,这里可能不重要。
无论如何,你可以将原始数据设置为项目:
self.list.SetItem(index, 1, name_data)
self.list.SetItem(index, 2, mail_data)
self.list.SetItem(index, 3, date_data)
好吧,你实际上并没有那样的 data_data
,但这是另一回事,我建议你查找如何使用 the datetime module 从字符串中解析日期数据。或者您可以按照与文件写入相同的方式进行操作。或者至少更好一点的是将数据保存到那里的一个变量中:
data_data = '0' + day_data + '/0' + month_data + '/' + year_data + '\n'
database.write(date_data)