2015-02-11 17 views
0

Этот код предназначен для проекта, над которым я работаю; Кажется, я пытаюсь вызвать строку. Программа предназначена для печати оценочных баллов из базы данных SQLite; метод 1, с которым у меня возникают проблемы, должен дать самые последние записи всех учеников о правильном классе и уровне сложности. База данных выглядит так:Python: объект «str» не является вызываемым

CREATE TABLE Scores ( [Key] INTEGER, Score INTEGER NOT NULL, PupilName TEXT NOT NULL, Difficulty BOOLEAN NOT NULL, ClassNumber VARCHAR, DateTime DATETIME );

и код (с нечетным битом отладки), как это:

import sqlite3 
 

 
#import collections 
 
print ("Welcome to the Arithmetic Challenge high score table.") 
 
def MainLoop(): 
 
    DisplayType = input ("Please enter: 1 for highest scores by student in alphabetical order; 2 for highest scores, highest to lowest; 3 for average scores, highest to lowest. ") 
 
    Difficulty = input ("Enter difficulty level.") 
 
    ClassNumber = input ("Enter class number.") #Input of variables 
 
    conn = sqlite3.connect("QuizStorage") 
 
    c = conn.cursor()#Connects 
 
    c.execute("SELECT * FROM Scores")        
 
    PupilsEligible = c.fetchall()#Finds pupils 
 
    #count = collections.defaultdict(int) #? 
 
    #print (count) 
 
    print (PupilsEligible) 
 
    DifficultyInt = int(Difficulty) 
 
    if DisplayType == "1": 
 
     print (DifficultyInt) 
 
     c.execute("SELECT * FROM Scores WHERE Difficulty = (?) AND ClassNumber = (?) ORDER BY # DESC LIMIT 1 ORDER BY PupilName"(DifficultyInt, ClassNumber)) 
 
     data = c.fetchall() 
 
     print (data) 
 
    elif DisplayType == "2": 
 
     c.execute("SELECT * , MAX(Score) FROM Scores WHERE Difficulty = (?) AND ClassNumber = (?) GROUP BY PupilName"(DifficultyInt, ClassNumber)) 
 
     data = c.fetchall() 
 
     print (data) 
 
    elif DisplayType == "3": 
 
     c.execute("SELECT * , AVG(Score) FROM Scores WHERE Difficulty = (?) AND ClassNumber = (?) GROUP BY PupilName"(DifficultyInt, ClassNumber)) 
 
     data = c.fetchall() 
 
     print (data) 
 

 
    else: 
 
     print ("That's not a valid answer.") 
 
    for row in c: 
 
     print (row) 
 
    conn.close() 
 
    MainLoop() 
 
MainLoop()

Пожалуйста, обратите внимание, что этот код имеет различные реликвии ранних попыток, приют» t все же отрезаны. Извините, если это неясно. Когда я пытаюсь запустить его, я получаю это:

Welcome to the Arithmetic Challenge high score table. 
 
Please enter: 1 for highest scores by student in alphabetical order; 2 for highest scores, highest to lowest; 3 for average scores, highest to lowest. 1 
 
Enter difficulty level.2 
 
Enter class number.3 
 
[('Alice Mann',), ('Fred Pratt',), ('John Smith',), ('Karen James',)] 
 
2 
 
Traceback (most recent call last): 
 
    File "H:\My Documents\CA 2\ACHighScore 0.5.5.py", line 37, in <module> 
 
    MainLoop() 
 
    File "H:\My Documents\CA 2\ACHighScore 0.5.5.py", line 19, in MainLoop 
 
    c.execute("SELECT * FROM Scores WHERE Difficulty = (?) AND ClassNumber = (?) ORDER BY # DESC LIMIT 1 ORDER BY PupilName"(DifficultyInt, ClassNumber)) 
 
TypeError: 'str' object is not callable

Я смотрел на других подобных ошибок и не осталось ни мудрее. Что именно означает это сообщение об ошибке, и как его можно избежать?

+3

У вас есть 'c.execute (« некоторая строка »(данные))'. Python считает, что вы пытаетесь вызвать строку как функцию. – georg

+0

... где это должно быть 'c.execute (" некоторая строка, где blah = (?) И foo = (?) ", (X1, x2))', чтобы поместить значения в метки вопросительных мест. Вы пропустили запятую. – Spacedman

ответ

2

Проблема заключается в следующей строке (например, говорит, что сообщение об ошибке): c.execute("SELECT * ...
Это потому, что когда вы делаете

"it's a string"(arg1, arg2)) 
      ^^^^^^^ 

вы пытаетесь сделать вызов в виде строки. Возможно, вы пропустили запятую: "it's a string", (arg1, arg2)
Обратите внимание, что у вас есть несколько подобных ошибок в вашем коде

Смежные вопросы