2009-06-18 11 views
8

Cosa significa questo errore?Cosa fa: TypeError: impossibile concatenare gli oggetti 'str' e 'list' significa?

TypeError: cannot concatenate 'str' and 'list' objects

Ecco parte del codice:

for j in ('90.','52.62263.','26.5651.','10.8123.'): 
    if j == '90.': 
     z = ('0.') 
    elif j == '52.62263.': 
     z = ('0.', '72.', '144.', '216.', '288.') 

    for k in z: 
     exepath = os.path.join(exe file location here) 
     exepath = '"' + os.path.normpath(exepath) + '"' 
     cmd = [exepath + '-j' + str(j) + '-n' + str(z)] 

     process=Popen('echo ' + cmd, shell=True, stderr=STDOUT) 
     print process 
+6

Puoi pubblicare il tuo codice? –

+1

capito, la mia risposta funziona per te ora. – Triptych

+1

else == '52 .62263. ': <- è un errore di sintassi in python – SilentGhost

risposta

11

io non sono sicuro che siete consapevoli del fatto che cmd è un elemento uno list, e non una stringa.

Modifica che la linea al di sotto sarebbe costruire una stringa, e il resto del codice funzionerà:

# Just removing the square brackets 
cmd = exepath + '-j' + str(j) + '-n' + str(z) 

Presumo che hai usato le staffe solo di raggruppare le operazioni. Non è necessario se tutto è su una riga. Se si voleva disgregare su due righe, è necessario usare le parentesi, non parentesi:

# This returns a one-element list 
cmd = [exepath + '-j' + str(j) + 
     '-n' + str(z)] 

# This returns a string 
cmd = (exepath + '-j' + str(j) + 
     '-n' + str(z)) 

nulla tra parentesi quadre in Python è sempre un list. Espressioni tra parentesi sono valutati come normale, a meno che non ci sia una virgola nell'espressione, nel qual caso le parentesi fungono da tuple costruttore:

# This is a string 
str = ("I'm a string") 

# This is a tuple 
tup = ("I'm a string","me too") 

# This is also a (one-element) tuple 
tup = ("I'm a string",) 
+1

Questo codice sembra riavvolgere più di quanto non dovrebbe? – Tyler

+1

@Tyler - non sono sicuro di cosa stai parlando. Il mio codice non contiene loop. – Triptych

+1

riferendosi al suo. sembra quasi casualmente tornare a 90 quando non dovrebbe. – Tyler

4

oggetti stringa possono essere concatenate soltanto con altre stringhe. Python è un linguaggio fortemente tipizzato. Non costringerà tipi per te.

si può fare:

'a' + '1' 

ma non:

'a' + 1 

nel tuo caso, si sta tentando di concat una stringa e una lista. questo non funzionerà È possibile aggiungere l'articolo alla lista, però, se questo è il risultato desiderato:

my_list.append('a') 
2

c'è un altro problema nel codice del PO:

z = ('0.') poi successivamente for k in z:

le parentesi nella prima dichiarazione sarà ignorato, che porta alla seconda affermazione vincolante k primo a '0' e poi '.' ... sembra z = ('0.',) stato io ntended.

Problemi correlati