2009-06-18 10 views
8

このエラーは何を意味しますか?何か:TypeError: 'str'と 'list'オブジェクトを連結できませんか?

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

は、ここでは、コードの一部です:

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

コードを投稿できますか? –

+1

それは私の答えが今あなたのために働く。 – Triptych

+1

else == '52 .62263。 ':< - はPythonの構文エラーです – SilentGhost

答えて

11

:それはあなたの望ましい結果である場合は、しかし、リストに項目を追加することができます。以下にその行を変更

は、文字列を構築するだろう、とあなたのコードの残りの部分は動作します:

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

私はあなただけのグループに操作をブラケットを使用を前提としています。すべてが1行にある場合、これは必要ではありません。 Pythonで角括弧の間

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

何が常にlistです:あなたは2行にそれを破るしたい場合は、括弧ではなく、ブラケットを使用する必要があります。

z = ('0.')その後:

# 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

このコードはそれ以上のループバックをしていないようですね。 – Tyler

+1

@タイラー - あなたが何を言っているのかわからない。私のコードにはループが含まれていません。彼を参照して – Triptych

+1

。それがすべきでないときにほぼ無作為に90に戻るように思われる。 – Tyler

4

文字列オブジェクトは他の文字列と連結することができます。 Pythonは強く型付けされた言語です。あなたのためにタイプを強制することはありません。

あなたが行うことができます。

'a' + '1' 

ではなくを:

'a' + 1 

あなたのケースでは、あなたは文字列とリストをCONCATしようとしています。これは動作しません。私はあなたがcmdは1要素listではなく、文字列であることを認識しているかわからない

my_list.append('a') 
2

OPのコード内の別の問題があります:括弧の間の式は括弧がtupleコンストラクタとして作用する場合には式のコンマがある場合を除き、通常のように評価しています後の最初の文でfor k in z:

括弧は'0'への最初のkを結合番目のステートメントにつながる、無視された後、'.' ... z = ('0.',)は私だったように見えることになりますntended。

関連する問題