错误:错误的文件描述符“
问题描述:
当我运行我的代码,我不明白为什么我不断收到以下错误信息:错误:错误的文件描述符“
with open(classChoice, 'r+') as resultfile:
OSError: [Errno 9] Bad file descriptor
这是我的代码:
import collections
classChoice = int(input("Which class do you want to order? "))
if classChoice == 1:
open ("Class 1.txt")
elif classChoice == 2:
open ("Class 2.txt")
else:
open ("Class 3.txt")
scores = {}
def alphabetical():
with open(classChoice, 'r+') as resultfile:
for line in resultfile:
name, score = lines.split(":")
scores.setdefault(name, collections.deque(maxlen=3)).append(int(score))
for name in sorted(scores):
m = max(scores[name])
print('{name}: {m}'.format(name=name, m=m))
def highestScore():
with open(classChoice, 'r+') as resultfile:
for line in resultfile:
name, score = line.split(":")
scores.setdefault(name, collections.deque(maxlen=3)).append(int(score))
for name in sorted(scores, key=lambda name: max(scores[name]), reverse=True):
m = max(scores[name])
print('{name}: {m}'.format(name=name, m=m))
def averageScore():
with open(classChoice, 'r+') as resultfile:
d = {}
for line in resultfile:
column = line.split(":")
names = column[0]
scores = int(column[1].strip())
d.setdefault(names, []).append(scores)
averages=[]
for names, v in d.items():
average = (sum(v[-3:])/len(v[-3:]))
averages.append((names, average))
for names, average in sorted(averages, key=lambda a: a[1], reverse=True):
print(names, average)
orderChoice = (input("How do you want to order the data? "))
if orderChoice == "alphabetically":
alphabetical()
elif orderChoice == "with highest score for the tests, highest to lowest":
highestScore()
else:
averageScore()
答
预计开放一个字符串,你给它一个int。我认为你正在试图做的是
classChoice = int(input("Which class do you want to order? "))
if classChoice == 1:
classChoice = "Class 1.txt"
elif classChoice == 2:
classChoice = "Class 2.txt"
else:
classChoice = "Class 3.txt"
答
你的问题是在这里:
classChoice = int(input("Which class do you want to order? "))
if classChoice == 1:
open ("Class 1.txt")
elif classChoice == 2:
open ("Class 2.txt")
else:
open ("Class 3.txt")
open ("Class <num>.txt")
会做什么打开该文件后。
然而,在这里:
with open(classChoice, 'r+') as resultfile:
你试图打开classChoice
。它是什么?让我猜,它可能是1
,2
或3
。
- 当你试图打开一个号码,你试图打开一个文件描述符。
- 当你打开一个文件,巨蟒还创建了一个文件描述符吧......你并不真的需要理解它现在是什么。
我建议你的代码更改为:
classChoice = int(input("Which class do you want to order? "))
if classChoice == 1:
filename = "Class 1.txt"
elif classChoice == 2:
filename = "Class 2.txt"
else:
filename = "Class 3.txt"
并改变每个以下行:
with open(classChoice, 'r+') as resultfile:
到:
with open(filename, 'r+') as resultfile:
因为你试图打开一个数字,所以'如果classChoice == 1:open(“Class 1.txt”)'不会做什么你试图做... –