2009-06-18 16 views
8

Bu hata ne anlama geliyor?Ne yapar: TypeError: 'str' ve 'list' nesnelerini birleştiremez mi?

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

İşte kod parçası:

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

Kodunuzu gönderir misiniz? –

+1

anladı - benim cevabım şimdi sizin için çalışıyor. – Triptych

+1

else == '52 .62263. ': <- python'da bir sözdizimi hatası – SilentGhost

cevap

11

: yani istediğiniz sonucu olup olmadığını, olsa listeye öğe ekleyebilirsiniz.

bir dize inşa edecek altına o çizgiyi değiştirme

, ve kodun kalan çalışacaktır:

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

Ben sadece gruba işlemleri parantez kullanılır varsayalım. Her şey bir satırda ise bu gerekli değildir. Python köşeli parantez

# 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)) 

şey hep bir list şudur: iki hat üzerine ayrılmak isteyen varsa, parantez değil parantez kullanmalıdır. Daha sonra

z = ('0.'): OP kodu başka sorun vardır

# 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

Bu kod, geri dönmemesi gerekenden daha fazla geri dönüyor gibi görünüyor? – Tyler

+1

@Tyler - neden bahsettiğinizden emin değilsiniz. Kodumda döngü yok. – Triptych

+1

onun için başvuran. Olmaması gerektiği gibi neredeyse rastgele 90'a geri dönüyor gibi görünüyor. – Tyler

4

dize nesneleri sadece diğer dizeleri ile birleştirilmiş edilebilir. Python güçlü yazılmış bir dildir. Senin için türleri zorlamayacaktır.

Yapabileceğiniz:

'a' + '1' 

ancak: senin durumunda

'a' + 1 

, bir dize ve bir liste Concat çalışıyoruz. Bu işe yaramaz. Sana cmd tek unsur list değil, bir dize farkındayız emin değilim

my_list.append('a') 
2

: İfade virgül durumda parantezler bir tuple yapıcı olarak hareket olmadıkça parantez ifadeler normal olarak değerlendirilmektedir Daha sonra

ilk açıklamada parantez for k in z: ... '0' ilk k ve sonra '.' bağlayıcı ikinci açıklamaya açan göz ardı z = ('0.',) i gibi görünüyor edilecek ntended.