1. ホーム
  2. python

[解決済み] キーワード引数 end=' ' を含む print に対する SyntaxError の取得

2022-08-16 15:55:44

質問

私はこの python スクリプトを持っていて、それを実行する必要があります。 gdal_retile.py , を実行する必要がありますが、この行で例外が発生します。

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

end=' ' は無効な構文です。私はその理由と、著者がおそらく何を意図しているのかに興味があります。

あなたがまだ推測していないなら、私はpythonに新しいです。


私は問題の根本的な原因は、これらのインポートが失敗していることだと思います。 そのため、このインポートを含む必要があります。 from __future__ import print_function

try: 
   from osgeo import gdal
   from osgeo import ogr
   from osgeo import osr
   from osgeo.gdalconst import *
except:
   import gdal
   import ogr
   import osr
   from gdalconst import *

どのように解決するのですか?

Python 3.xを使用していることは間違いありませんか?Python 2.xではこの構文が使えないのは print はまだステートメントだからです。

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

はPython 2.xでは

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

または

print "foo" % bar, end=" "

すなわち、タプルを引数としたprintの呼び出しとして。

これは明らかに間違った構文です(リテラルはキーワード引数を取りません)。Python 3.xでは print は実際の関数なので、キーワード引数も取ります。

Python 2.x での正しいイディオムである end=" " です。

print "foo" % bar,

(最後のコンマに注意してください。これにより、改行ではなくスペースで行が終わります)

出力をより細かく制御したい場合には sys.stdout を直接使うことを検討してください。これは出力に特別な魔法をかけることはありません。

もちろん、Python 2.x の最近のバージョン (2.5 にはあるはずですが、2.4 については不明です) では __future__ モジュールを使ってスクリプトファイル内で有効にすることができます。

from __future__ import print_function

同じく unicode_literals といった素敵なものもあります( with_statement など)。しかし、これは Python 2.x の本当に古いバージョン(つまり、この機能が導入される前に作成されたもの)では動作しないでしょう。