Je reçois l'erreur suivante:

L'index 0 a le type 'tuple' mais 'str' est attendu

Ma variable de liste ressemble à ceci:

[('304',), ('316',), ('303',), ('BS S130',), ('Ne pas utiliser',), ('17 -4PH ',), (' 431S29 ',), (' 416 ',), (' 304 ',), (' 316 ',), (' S143D ',), ('15 / 5PH-H1025',), ('304S11',) , («316S11»,), («304L»,), («316L»,), («304S16»,), («BS S527»,), («316L»,), («316»,) , ('Divers',)]

def stainless_list(self):
    stainless_getlist = []

    content = 'SELECT grade FROM stainless ORDER BY prefix ASC'
    res = conn.execute(content)
    for row_index, row_data in enumerate(res):
        stainless_getlist.append(row_data)

    conn.close

    self.comboBox_2.clear()
    self.comboBox_2.addItems(stainless_getlist)

    print(stainless_getlist)
    return

Comment déclarer ma liste sous forme de chaîne au lieu de tuple afin qu'elle se fixe correctement à ma liste déroulante?

2
Yan 16 mars 2019 à 02:55

2 réponses

Meilleure réponse

Vous pouvez décompresser le premier élément de chaque tuple pendant que vous parcourez les lignes (et vous n'avez pas besoin de enumerate car vous n'utilisez pas l'index de ligne).

Changement:

for row_index, row_data in enumerate(res):
    stainless_getlist.append(row_data)

À:

for item, in res:
    stainless_getlist.append(item)
3
blhsing 15 mars 2019 à 23:59

Votre liste est une liste de tuples, où chaque tuple est une ligne de données. Ce qui peut être déroutant, c'est que la sortie de votre sélection est une liste de lignes, avec une seule valeur dans chaque ligne. Essaye ça:

for row in res:
   stainless_getlist.append( row[0] )

La 1ère ligne est un tuple contenant une chaîne ('304',) et pas seulement une chaîne '304'.

1
Bob McCormick 16 mars 2019 à 00:11