i + = 1 TypeError:无法连接'str'和'int'对象

时间:2016-04-12 12:36:12

标签: python increment typeerror

有人能说出为什么这不起作用吗?

我将文件1中的一些参数提供给文件2中的函数(myfile.py -i inpufile -n 3等)。 -n 3表示创建3次类似CS_TH,CS_Z4等的东西并将其附加到列表中(在文件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

我在网上找到了一些关于整数增量的信息,但我不明白这里的问题是什么。有一个列表cs_id = []必须填充与参数-n一样多(例如-n 3)。

我希望我以正确的方式解释。

亲切的问候。

4 个答案:

答案 0 :(得分:2)

您为循环元素使用相同的变量名,因此循环i内部是一个字符串,而不是在其上方声明的计数器。然后,作为一个String并且知道python不喜欢你连接不属于同一类型的东西,你会触发TypeError

如果要将参数作为整数使用,则应将其转换为int(),并将int转换为字符串,使用str(),当然使用不同的变量名称:)

答案 1 :(得分:0)

for i in nosi分配一个字符串值。你进一步(错误地)使用了计数变量i,期望它仍然是int,但事实并非如此。因此问题。试试这个:

for no in nos:

答案 2 :(得分:0)

你犯了两个错误:

  • 使用相同的变量i来循环变量nos并计算其长度

  • 尝试连接字符串(nos的当前元素)和循环计数器

只需将for i in nos:替换为for _ in nos:,因为它是您案例中的静默变量。这样,您将循环nos变量。

答案 3 :(得分:0)

你可能会遇到问题:

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

来自命令行的任何内容都是字符串,因此arg是一个字符串。您可能希望将其转换为带有int()的整数:

instances = int(arg)

然后你需要修复你的循环:

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)

如果您使用的是Python 3,请使用range()代替xrange()