TypeError:'int'对象在期望返回时不是可订阅的

时间:2016-12-19 16:35:12

标签: python python-3.x

我遇到以下代码的问题

这是我的主要功能

def jogoFinal(id_tema, id_tipo, id_user):
    global pontuacao
    perguntas = db.jogoFinal(id_tema, id_tipo, id_user)
    dados = []
    id_jogo = random.randrange(1, 10000, 2)
    for row in range(len(perguntas)):
        id_pergunta = row[0]
        perg = row[1]
        op1 = row[2]
        op2 = row[3]
        op3 = row[4]
        op4 = row[5]
        res = row[6]
        print (perg)
        print("Estas são as suas opções: ")
        print ("opção 1: ", op1)
        print ("opção 2: ", op2)
        print ("opção 3: ", op3)
        print ("opção 4: ", op4)
        resp = int(input("Escolha uma das seguintes opções: "))
        while resp not in (1,2,3,4):
            print("Tem de introduzir uma opção válida (1,2,3,4)")
            resp = int(input("Escolha uma das seguintes opções: "))
        else:
                dados.append([id_jogo, id_user,id_pergunta, resp])
                if resp == res:
                        pontuacao += 1
        print(pontuacao)

 def jogoFinal(self, id_tema, id_tipo, id_user):
    query = "SELECT id_pergunta,pergunta,op1,op2,op3,op4,correto FROM perguntas where id_tema = %s and id_grau = %s ORDER BY RAND() LIMIT 5;"
    try:
        self.cur.execute(query, (id_tema,id_tipo))
        self.result = self.cur.fetchall()
        for row in self.result:
            return row
    except mdb.IntegrityError:
        logging.warn("Falhou a inserção dos dados")

然后返回必须给我5个问题的结果,但我收到了以下错误

id_pergunta = row[0]

TypeError:'int'对象不可订阅

任何帮助?

UPDATE 如果我不使用我的db类

使用
def jogoFinal(id_tema, id_tipo, id_user):
    global pontuacao
    ans=True
    id_jogo = random.randrange(1, 10000, 2)
    try:
            cur = conn.cursor()
            cur.execute("SELECT id_pergunta,pergunta,op1,op2,op3,op4,correto FROM perguntas where id_tema = %s and id_grau = %s ORDER BY RAND() LIMIT 5",(id_tema,id_tipo))
            data = cur.fetchall()
            dados = []
            for row in data:
                    id_pergunta = row[0]
                    perg = row[1]
                    op1 = row[2]
                    op2 = row[3]
                    op3 = row[4]
                    op4 = row[5]
                    res = row[6]
                    print (perg)
                    print("Estas são as suas opções: ")
                    print ("opção 1: ", op1)
                    print ("opção 2: ", op2)
                    print ("opção 3: ", op3)
                    print ("opção 4: ", op4)
                    resp = int(input("Escolha uma das seguintes opções: "))
                    while resp not in (1,2,3,4):
                        print("Tem de introduzir uma opção válida (1,2,3,4)")
                        resp = int(input("Escolha uma das seguintes opções: "))
                    else:
                            dados.append([id_jogo, id_user,id_pergunta, resp])
                            if resp == res:
                                    pontuacao += 1
                                    print(pontuacao)


    except:
            print ("Erro: Dados indisponíveis ")
    gravaJogada(dados)
    cur.close()
    conn.close()

我有我想要的东西,但我必须使用db class并让它工作

任何帮助

更新2

我的db class

class DB():
    def __init__(self):
        db = mdb.connect('localhost', 'root', '', 'escola')
        self.cur = db.cursor()

    def close(self):
        self.cur.close()


def jogoFinal(self, id_tema, id_tipo, id_user):
    query = "SELECT id_pergunta,pergunta,op1,op2,op3,op4,correto FROM perguntas where id_tema = %s and id_grau = %s ORDER BY RAND() LIMIT 5;"
    try:
        self.cur.execute(query, (id_tema,id_tipo))
        self.result = self.cur.fetchall()
        for row in self.result:
            return row
    except mdb.IntegrityError:
        logging.warn("Falhou a inserção dos dados")

从另一个文件中,我称这个类和函数

1 个答案:

答案 0 :(得分:0)

row是一个整数,不支持订阅。

listtupledictionary是三种支持订阅的内置类型。