我试图将我写入的内容保存到变量中的文件中,然后将其附加到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'
答案 0 :(得分:1)
写入文件不会返回你在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')
这些写操作不会返回任何内容,因此名称,邮件和日期将始终为None
。这就是你得到错误的原因。只需删除作业:
database.write(name_data + '\n')
相反,您可以在SetItem
- 调用中使用原始变量,假设您已在某处定义它们。
index = self.list.InsertItem(sys.maxint, '1')
那么为什么你会传递这个sys.maxint
而不是0呢?我对wxpython了解不多。我做了一个猜测,并假设该函数返回列表长度作为索引并将插入到结尾,而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)