Hath Hath - 10 months ago 62
Python Question

python print end=' '

I have this python script where I need to run


but I get an exception on this line:

if Verbose:
print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')

is invalid syntax. I am curious as to why, and what the author probably meant to do.

I'm new to python if you haven't already guessed.

I think the root cause of the problem is that these imports are failing
and therefore one must contain this import
from __future__ import print_function

from osgeo import gdal
from osgeo import ogr
from osgeo import osr
from osgeo.gdalconst import *
import gdal
import ogr
import osr
from gdalconst import *


Are you sure you are using Python 3.x? The syntax isn't available in Python 2.x because print is still a statement.

print("foo" % bar, end=" ")

in Python 2.x is identical to

print ("foo" % bar, end=" ")


print "foo" % bar, end=" "

i.e. as a call to print with a tuple as argument.

That's obviously bad syntax (literals don't take keyword arguments). In Python 3.x print is an actual function, so it takes keyword arguments, too.

The correct idiom in Python 2.x for end=" " is:

print "foo" % bar,

(note the final comma, this makes it end the line with a space rather than a linebreak)

If you want more control over the output, consider using sys.stdout directly. This won't do any special magic with the output.

Of course in somewhat recent versions of Python 2.x (2.5 should have it, not sure about 2.4), you can use the __future__ module to enable it in your script file:

from __future__ import print_function

The same goes with unicode_literals and some other nice things (with_statement, for example). This won't work in really old versions (i.e. created before the feature was introduced) of Python 2.x, though.