2016-04-12 9 views
0

誰かがこのisntの動作をなぜ伝えることができますか?i + 1 TypeError: 'str'と 'int'オブジェクトを連結できません

私は、ファイル1のいくつかの引数をファイル2の関数に与えます(myfile.py -i inpufile -n 3など)。 -n 3は、CS_TH、CS_Z4などのようなものを3回作成し、それをリスト(ファイル2のcs_id = [])に追加することを意味します。

File1..snip ...

for opt, arg in opts: 
    if opt in ("-h", "--help"): 
     func.usage() 
     sys.exit() 
    elif opt in '-d': 
     global _debug 
     _debug = 1 
    elif opt in ("-i", "--ifile"): 
     global ifile 
     ifile = arg 
    elif opt in ("-o", "--ofile"): 
     global ofile 
     ofile = arg 
    elif opt in ("-n", "--NumberOfInstances"): 
     global instances 
     instances = arg 

func.unzip(ifile, instances) 

ファイル2 ...スニップ..

def unzip(ifile, instances,): 
    global cs_id 
    newinstance = ifile 
    nos = instances 
    i = 0 
    cs_id = [] 
    for i in nos: 
     cs_id.append('CS_' + id_generator()) 
     i += 1 
    print ', '.join(cs_id) 

、私はいくつかの情報を発見した、このエラー

i += 1 
TypeError: cannot concatenate 'str' and 'int' objects 
を得ましたネットの整数増加について私はここで何が問題か理解していません。引数-nが設定されている分(例えば、-n 3)に満たさなければならないリストcs_id = []があります。

私はそれを正しい方法で説明したいと思います。

大切にしてください。

答えて

1

ループ要素に同じ変数名を使用しているため、ループ内でiは文字列であり、その上に宣言されたカウンタではありません。次に、Stringであり、Pythonが同じ型ではないものを連結したくないことを知り、TypeErrorをトリガーします。

引数を整数として扱う場合は、 int()と、文字列にint型に変換するための1つ、str()を使用し、もちろん異なる変数名を使用:)

0

for i in nosi文字列の値を割り当てます。カウント変数iをさらに(間違って)使用しましたが、まだそれはintであると予想しています。したがって、問題です。代わりにこれを試してみてください:

for no in nos: 
0

あなたは2つのミス行わ:あなたの変数nosをループし、文字列を連結しようとし、その長さ

  • をカウントするための同じ変数iを使用して

    • を(現在の要素:nos)とループカウンタ

    for i in nos:for _ in nos:に置き換えるだけで、あなたのケースでサイレント変数になります。このようにして、変数nosをループします。

  • 0

    あなたは問題だが、ここで可能性があります。コマンドラインから来

    elif opt in ("-n", "--NumberOfInstances"): 
        global instances 
        instances = arg 
    

    ものはそうargが文字列で、文字列です。range()の代わりxrange()を使用し、あなたは、Python 3を使用している場合

    def unzip(ifile, instances,): 
        global cs_id 
        newinstance = ifile 
        cs_id = [] 
        for i in xrange(instances): 
         cs_id.append('CS_' + id_generator()) 
        print ', '.join(cs_id) 
    

    instances = int(arg) 
    

    そして、あなたはあなたのループを修正する必要があります:あなたは、おそらく)(int型で整数に変換したいです。

    +0

    Thxこれは私に多くの人を助けます!今それは正常に動作します。実際のところ、cmdの引数は文字列などではありませんでした。 –

    +0

    ええ、いくつかの言語では文字列の計算が可能ですが(Perlはこれを許しています)、Pythonはそうではありません。だからあなたは最初にそれを変換する必要があります。お役に立てて嬉しいです! – jszakmeister

    関連する問題