在python文件操作中使用writelines()函数却报write()函数使用错误

发布时间 2023-07-31 17:32:11作者: 晴天_雨水

代码是这样的:


1 def func1():
2     file = open("test.txt", "a+", encoding="utf-8")
3     list1 = [("20", "10")]
4     list2 = [{"name": "Tom", "age": 20}]
5     file.writelines(list1)
6     file.writelines(list2)
7     file.close() 

下面是报错信息

 报错显示第六行,明明使用的是writelines()函数确报write()错误,不能传元组,只能是str。但是使用的是writelines()传参数是列表没有问题但还是报错,经过网络查询算是找到了原因,writelines()函数确实是接收列表参数但是对这个列表参数是有要求的,列表要是str类型元素组成的列表,其他类型就会报错

下面是该函数定义说明位置

    def writelines(self, lines: List[AnyStr]) -> None:
        pass
  #
List[AnyStr] 就是说明列表中的元素是要是str型
 

所以上面传递的列表list1和list2,里面元素是元组和字典构成的就会报错,而把里面的元素类型转化一下就可以通过了

 1 def func2():
 2     file = open("test.txt", "a+", encoding="utf-8")
 3     list1 = [("20", "10")]
 4     list2 = [{"name": "Tom", "age": 20}]
 5     for i in list1:
 6         file.writelines(str(i)+"\n")   # 把列表中的元组转换成str
 7     for i in list2:
 8         file.writelines(str(i)+"\n")  #把列表中的字典转换成str
 9  file.seek(0,0) 10 list3=file.readlines() 11 for i in list3: 12 print(i[0:-1]) 13 print(list3) 14  file.close() 15 16 if __name__=="__main__": 17 func2()

在文件写入的时候遍历,将列表中的元素转换成str型就可以正常写入了输出结果了

 而为什么会报write()的错误,应该就是在查询的时候,一位网友猜测说的原因是writelines()方法内部是通过write()实现功能的,所以在writelines()传递进列表参数,给函数体内的write()函数,在循环遍历分解拿到的是其他类型,而不是str时当然会报错,而python报错位置只会定义到外部的函数,而不会定义到内置函数内部实现细节里面,所报了似是而非,令人不解的错误