【问题标题】:query takes 7 positional arguments but eight were given查询接受 7 个位置参数,但给出了 8 个
【发布时间】:2012-12-12 18:17:37
【问题描述】:

我不断收到错误:

Traceback (most recent call last):
  File "C:\Users\Shepard\Desktop\Final Program\TestMaker.py", line 53, in <module>
    qs.AddQuestion(None, Question, Answer[1] , Answer[2], Answer[3], Answer[4], Answer[5])
TypeError: AddQuestion() takes 7 positional arguments but 8 were given

似乎很容易弄清楚。我刚刚浏览了所有查询语句并计算了七个位置参数。每次。包括身份证。这是什么黑魔法?我很迷茫,这甚至不滑稽。

这是生成 sqlite3 查询的所有代码。

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.execute(query)
    self.connection.commit()

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

if __name__ == "__main__":
    qs = QuestionStorage(testName + ".db")
    qs.CreateDb()    
    qs.AddQuestion(None, Question, Answer[1] , Answer[2], Answer[3], Answer[4], Answer[5])

我现在很迷茫:S

【问题讨论】:

    标签: python sqlite python-3.x


    【解决方案1】:

    AddQuestion 是对象的绑定方法(在您的情况下对象为 qs),而不是未绑定的函数。这意味着当您调用它时,qs 会自动作为第一个位置参数传递,在您显式传递的参数之前。这就是为什么编写方法时通常使用self 作为第一个参数。

    你需要改变

    qs.AddQuestion(None, Question, Answer[1] , Answer[2], Answer[3], Answer[4], Answer[5])
    

    qs.AddQuestion(Question, Answer[1] , Answer[2], Answer[3], Answer[4], Answer[5])
    

    【讨论】:

      【解决方案2】:

      这不需要None (AFAICT):

      qs.AddQuestion(None, Question, Answer[1] , Answer[2], Answer[3], Answer[4], Answer[5])
      

      另外,您稍后在.AddQuestion 的查询中会遇到问题 - 我在下面为占位符数了 8 个...

      VALUES (?, ?, ?, ?, ?, ?, ?, ?)
      

      参数为 7...所以,不确定您要做什么!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        • 2018-11-02
        • 2022-01-17
        • 2019-09-21
        • 2019-07-19
        相关资源
        最近更新 更多