2

現在、テストを作成してデータベースに保存し、印刷できるようにするプログラムに取り組んでいます。エラーが発生し続けます:

Traceback (most recent call last):
File "C:/Users/Shepard/Desktop/Gradebook.py", line 50, in <module>
qs = QuestionStorage("questions.db")
TypeError: object.__new__() takes no parameters

誰でも何か考えがありますか?QuestionStorage クラスのどこかにあると想定していますが、何も理解できません。SQLite3 を使用するのはこれが初めてで、かなりの問題を抱えています。誰かが私を助けてくれれば、それは素晴らしいことです。:)

import sqlite3
class QuestionStorage(object):
    def _init_(self, path):
        self.connection = sqlite3.connect(path)
        self.cursor = self.connection.cursor()

    def Close(self):
        self.cursor.close()
        self.connection.close()

    def CreateDb(self):
        query = """CREATE TABLE questions
                 (id INTEGER PRIMARY KEY, Question TEXT, Answer1 TEXT, Answer2 TEXT, Answer3 TEXT, Answer4 TEXT, CorrectAnswer TEXT)"""
        self.cursor.exeute(query)
        self.connection.commit()
        #self.cursor.close()

    def AddQuestion(self, Question, Answer1, Answer2, Answer3, Answer4):
        self.cursor.execute("""INSERT INTO questions
                                VALUES (?, ?, ?, ?, ?, ?)""", (None, Question, Answer1, Answer2, Answer3, Answer4, CorrectAnswer))
        self.connection.commit()

    def GetQuestion(self, index = None):
        self.cursor.execute("""SELECT * FROM questions WEHRE id=?""", (index,))
        res = self.cursor.fetchone()
        return res




print ("TestMaker v.1")
print ("To create a multiple choice test, follow the directions.")
testName = input ("Give your test a name.")
testQ = int(input ("How many questions will be on this test? (Numeric value only.)"))

counter = 1
while counter <= testQ:
    Answer = []
    Answer = [1,2,3,4,5,6]
    Question = input ("What is your question?")
    Answer[1] = input ("What is the first answer?")
    Answer[2] = input ("What is the second answer?")
    Answer[3] = input ("What is the third answer?")
    Answer[4] = input ("What is your last answer?")
    correctAnswer = int(input("Which answer is the correct answer? (1, 2, 3, or 4?)"))
    Answer[5] = Answer[correctAnswer]
    print (Answer[1:6])
    counter +=1
    if __name__ == "__main__":
        qs = QuestionStorage("questions.db")
        qs.CreateDb()    
        qs.AddQuestion(Question, Answer[1] , Answer[2], Answer[3], Answer[4], Answer[5])

qs.Close()
4

3 に答える 3

10

これを自分でデバッグする方法を学ぶ価値があります。

エラー メッセージには、問題が sqlite3 に関係していることを示すものは何もありません。では、すべての sqlite3 呼び出しを取り出しQuestionStorageてプログラムを実行するとどうなるでしょうか?

class QuestionStorage(object):
    def _init_(self, path):
        self.connection = None
        self.cursor = None

    def Close(self):
        pass

    def CreateDb(self):
        query = """CREATE TABLE questions
                 (id INTEGER PRIMARY KEY, Question TEXT, Answer1 TEXT, Answer2 TEXT, Answer3 TEXT, Answer4 TEXT, CorrectAnswer TEXT)"""

    def AddQuestion(self, Question, Answer1, Answer2, Answer3, Answer4):
        pass

    def GetQuestion(self, index = None):
        return [""]

まったく同じエラーが発生します。これは、sqlite3 のせいではないことを証明しており、デバッグ方法の手がかりが得られることを願っています。

トレースバックからを作成する際に問題が発生していることがわかりますが、QuestionStorageこれはプログラムで 1 回しか行っていません。残りのコードから他のすべてを取り除いたらどうなるでしょうか?

class QuestionStorage(object):
    def _init_(self, path):
        pass

qs = QuestionStorage("questions.db")

同じエラー。そして今、問題が何であるかははるかに明白です。そして、自分でそれを理解できなくても、その 5 行の簡略化されたバージョンを SO に投稿できます。

于 2012-12-12T03:06:33.367 に答える
10

メソッドの__init__シグネチャは__init__であり_init_、Pythonではありません

于 2012-12-12T02:59:58.780 に答える
1

1 つではなく、init の前に 2 つ、init の後に 2 つのアンダースコアが必要だと思います。

于 2014-01-06T15:43:20.610 に答える