2016-04-28 181 views
2

当我运行我的代码,我不明白为什么我不断收到以下错误信息:错误:错误的文件描述符“

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()    
+0

因为你试图打开一个数字,所以'如果classChoice == 1:open(“Class 1.txt”)'不会做什么你试图做... –

回答

0

预计开放一个字符串,你给它一个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" 
+0

谢谢你,但现在它说: – Harry

+0

名,得分= lines.split(“:”) NameError:全局名称“行”是没有定义 – Harry

+0

并且:姓名,分数= lines.split(“:”) AttributeError:'dict'对象没有属性'split' – Harry

0

你的问题是在这里:

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,23

  • 当你试图打开一个号码,你试图打开一个文件描述符
  • 当你打开一个文件,巨蟒还创建了一个文件描述符吧......你并不真的需要理解它现在是什么。

我建议你的代码更改为:

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: 
相关问题