鱼C论坛

 找回密码
 立即注册
查看: 2660|回复: 3

record.txt分别存入boy和girl.txt的作业中,这样写为啥会报错呀?

[复制链接]
发表于 2020-1-8 21:07:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
作业题,这样写就会报错ValueError: I/O operation on closed file,如果把函数全部撤掉,语句带入就不会报错。
为什么捏?

代码如下:

带函数,会报错:
  1. count=0
  2. number=['1','2','3']

  3. def open_new_files(count):
  4.     file_name_boy =str('boy_'+ number[count] +'.txt')
  5.     file_name_girl =str('girl_'+ number[count] + '.txt')
  6.     boy_file = open(file_name_boy,'w')
  7.     girl_file=open(file_name_girl,'w')


  8. open_new_files(count)
  9. f_read = open('record.txt','r')
  10. for each_line in f_read:
  11.     if each_line[2] == '鱼':
  12.         boy_file.write(each_line.split(':')[1])
  13.         boy_file.write('\n')
  14.     if each_line[2] == '服':
  15.         girl_file.write(each_line.split(':')[1])     #为这里会报错:ValueError: I/O operation on closed file.
  16.         girl_file.write('\n')
  17.     if each_line[2]=='=':
  18.         boy_file.close()
  19.         girl_file.close()
  20.         count+=1
  21.         open_new_files(count)

  22. open_new_files(count)
  23. f_read.close()
复制代码


不带函数,冗长,但是不报错:
  1. count=0
  2. number=['1','2','3','4,','5','6','7','8','9','0']

  3. def open_new_files(count):
  4.     file_name_boy =str('boy_'+ number[count] +'.txt')
  5.     file_name_girl =str('girl_'+ number[count] + '.txt')
  6.     boy_file = open(file_name_boy,'w')
  7.     girl_file=open(file_name_girl,'w')


  8. file_name_boy =str( 'boy_'+ number[count] +'.txt')
  9. file_name_girl =str('girl_' + number[count] + '.txt')
  10. boy_file = open(file_name_boy,'w')
  11. girl_file = open(file_name_girl,'w')

  12. f_read = open('record.txt','r')

  13. for each_line in f_read:
  14.     if each_line[2] == '鱼':
  15.         boy_file.write(each_line.split(':')[1])
  16.         boy_file.write('\n')
  17.     if each_line[2] == '服':
  18.         girl_file.write(each_line.split(':')[1])
  19.         girl_file.write('\n')
  20.     if each_line[2]=='=':
  21.         boy_file.close()
  22.         girl_file.close()
  23.         count+=1
  24.         file_name_boy =str('boy_'+ number[count] +'.txt')
  25.         file_name_girl =str('girl_'+ number[count] + '.txt')
  26.         boy_file = open(file_name_boy,'w')
  27.         girl_file=open(file_name_girl,'w')

  28. boy_file.close()
  29. girl_file.close()
  30. f_read.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-1-8 21:11:21 | 显示全部楼层
试试这样:

  1. count = 0
  2. number = ['1', '2', '3']


  3. def open_new_files(count):
  4.     file_name_boy = str('boy_' + number[count] + '.txt')
  5.     file_name_girl = str('girl_' + number[count] + '.txt')
  6.     boy_file = open(file_name_boy, 'w')
  7.     girl_file = open(file_name_girl, 'w')
  8.     return boy_file, girl_file


  9. boy_file, girl_file = open_new_files(count)
  10. f_read = open('record.txt', 'r')
  11. for each_line in f_read:
  12.     if each_line[2] == '鱼':
  13.         boy_file.write(each_line.split(':')[1])
  14.         boy_file.write('\n')
  15.     if each_line[2] == '服':
  16.         girl_file.write(each_line.split(':')[1])
  17.         girl_file.write('\n')
  18.     if each_line[2] == '=':
  19.         boy_file.close()
  20.         girl_file.close()
  21.         count += 1
  22.         boy_file, girl_file = open_new_files(count)

  23. f_read.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-10 18:05:37 | 显示全部楼层

我试了一下,还是会报错。。
报错信息是这样的:
  File "/Users/paozi/PycharmProjects/fishc/work_30.py", line 15, in <module>
    for each_line in f_read:
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 2: invalid start byte
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-10 18:06:30 | 显示全部楼层
宝宝包包抱抱 发表于 2020-1-10 18:05
我试了一下,还是会报错。。
报错信息是这样的:
  File "/Users/paozi/PycharmProjects/fishc/work_30 ...

那这样:

  1. count = 0
  2. number = ['1', '2', '3']


  3. def open_new_files(count):
  4.     file_name_boy = str('boy_' + number[count] + '.txt')
  5.     file_name_girl = str('girl_' + number[count] + '.txt')
  6.     boy_file = open(file_name_boy, 'w')
  7.     girl_file = open(file_name_girl, 'w')
  8.     return boy_file, girl_file


  9. boy_file, girl_file = open_new_files(count)
  10. f_read = open('record.txt', 'r', encoding='utf-8')
  11. for each_line in f_read:
  12.     if each_line[2] == '鱼':
  13.         boy_file.write(each_line.split(':')[1])
  14.         boy_file.write('\n')
  15.     if each_line[2] == '服':
  16.         girl_file.write(each_line.split(':')[1])
  17.         girl_file.write('\n')
  18.     if each_line[2] == '=':
  19.         boy_file.close()
  20.         girl_file.close()
  21.         count += 1
  22.         boy_file, girl_file = open_new_files(count)

  23. f_read.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-21 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表