user313022
user313022

Reputation: 145

"cannot concatenate 'str' and 'list' objects" keeps coming up :(

I'm writing a python program. The program calculates Latin Squares using two numbers the user enters on a previous page. But but an error keeps coming up, "cannot concatenate 'str' and 'list' objects" here is the program:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# enable debugging
import cgi
import cgitb
cgitb.enable()

def template(file, **vars):
    return open(file, 'r').read() % vars

print "Content-type: text/html\n"
print

form = cgi.FieldStorage() # instantiate only once!
num_1 = form.getfirst('num_1')
num_2 = form.getfirst('num_2')

int1r = str(num_1)
int2r = str(num_2)

def calc_range(int2r, int1r):
    start = range(int2r, int1r + 1)
    end = range(1, int2r)
    return start+end


int1 = int(int1r)

int2 = int(int2r)

out_str = ''

for i in range(0, int1):
    first_line_num = (int2 + i) % int1
    if first_line_num == 0:
        first_line_num = int1
    line = calc_range(first_line_num, int1)
out_str += line


print template('results.html', output=out_str, title="Latin Squares")

Upvotes: 2

Views: 21343

Answers (4)

Daniel G
Daniel G

Reputation: 69782

calc_range() returns a list; however, you are attempting to add it to a string (out_str).

It looks like your code is unfinished - don't you want to do something with the range of numbers returned by calc_range()? Like, say, something with the form?

line = ''.join(num_1[index] for index in calc_range(first_line_num, int1))

I don't know if that's what you want - but maybe something like that?

Upvotes: 0

Justin Ethier
Justin Ethier

Reputation: 134255

range returns a list object, so when you say

line = calc_range(first_line_num, int1)

You are assigning a list to line. This is why out_str += line throws the error.

You can use str() to convert a list to a string, or you can build up a string a different way to get the results you are looking for.

Upvotes: 4

samtregar
samtregar

Reputation: 7148

You didn't say what line you're getting the error from, but I'm guessing it's:

out_str += line

The first variable is a string. The second is a list of numbers. You can't concatenate a list onto a string. I don't know what you're trying to do exactly, but how about:

out_str += ", ".join(line)

That will add the numbers joined by commas onto out_str.

Upvotes: 1

Matti Virkkunen
Matti Virkkunen

Reputation: 65166

By doing out_str += line, you're trying to add a list (from calc_range) to a string. I don't even know what this is supposed to be doing, but that's where the problem lies.

Upvotes: 1

Related Questions