Этот код предназначен для проекта, над которым я работаю; Кажется, я пытаюсь вызвать строку. Программа предназначена для печати оценочных баллов из базы данных 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
Я смотрел на других подобных ошибок и не осталось ни мудрее. Что именно означает это сообщение об ошибке, и как его можно избежать?
У вас есть 'c.execute (« некоторая строка »(данные))'. Python считает, что вы пытаетесь вызвать строку как функцию. – georg
... где это должно быть 'c.execute (" некоторая строка, где blah = (?) И foo = (?) ", (X1, x2))', чтобы поместить значения в метки вопросительных мест. Вы пропустили запятую. – Spacedman