Multiline parsing of python compiler demistification needed

Frank Millman frank at chagford.com
Thu Jun 16 05:00:29 EDT 2016


"Yubin Ruan"  wrote in message 
news:930753e3-4c9c-45e9-9117-d340c033ac66 at googlegroups.com...

> Hi, everyone, I have some problem understand the rule which the python 
> compiler use to parsing the multiline string.
>
> Consider this snippet:
>
> str_1 = "foo"
> str_2 = "bar"
>
> print "A test case" + \
>        "str_1[%s] " + \
>        "str_2[%s] " % (str_1, str_2)
>
> Why would the snippet above give me an "TypeError: not all arguments 
> converted during string formatting" while the one below not ?

This has nothing to do with multi-line strings.

Try that as a single line -

    print "A test case " + "str_1[%s] " + "str_2[%s]" % (str_1, str_2)

You will get the same error message.

The reason is that the use of the '+' sign to concatenate strings requires 
that each sub-string is a valid string in its own right.

The correct way to write it is -

    print "A test case " + "str_1[%s] " % (str_1) + "str_2[%s]" % (str_2)

If you wrote it without the '+' signs, the answer would be different. Python 
treats contiguous strings as a single string, so you could write it like 
this -

    print "A test case " "str_1[%s] " "str_2[%s]" % (str_1, str_2)

Frank Millman




More information about the Python-list mailing list