python print end = ''


115

実行する必要がある場所にこの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 *

2
トレースバックをポストして、受け取った例外を最もよく診断すると、非常に役立ちます。明らかな構文エラーは、開始引用符の欠如によるものです。それが修正された場合でも、__future__インポートなしで印刷機能を持たないPython 2では構文エラーになります。
マイクグラハム

2
余談ですが、そうでない変数ClassNamesは小文字で始める必要があります。
マイクグラハム

wrt / @ Mike、Pythonでの変数の命名とコーディングスタイルの完全なガイドラインについては、python.org / dev / peps / pep-0008を参照してください。Pythonにはほとんど一貫したライブラリを使用する特権があり、他の人のコードを使用している場合でも通常の推測ゲーム(PHPなど)を回避できることが多いため、ガイドラインに従うことをお勧めします。
アランプラム

5
将来のエラー、特に構文エラーのヘルプを求めるときは、再入力せずに、実行しようとした正確なコードを提供するようにしてください。
マイクグラハム

@マイク-通常、もう一度入力する必要はありませんが、コードがリモートコンピューター上にあるため、入力できませんでした。今後はもっと注意していきます。
Hath

回答:


155

Python 3.xを使用していますか?構文はprintまだステートメントであるため、Python 2.xでは使用できません。

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

Python 2.xでは

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

または

print "foo" % bar, end=" "

つまり、タプルを引数として出力するための呼び出しとして。

これは明らかに悪い構文です(リテラルはキーワード引数を取りません)。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の本当に古いバージョン(つまり、機能が導入される前に作成されたバージョン)では機能しません。


1
私が使っdpkg -p pythonている私のバージョンをチェックしたところ、それはバージョン2.xx.xxでした。どうもありがとうございました。私はそれをの形にする提案を適用しましたがprint "foo" %bar, 、それは完全にうまくいきました。
Mehrad、2014

覚えておいてください、との(微妙な)差があるprint foo, barprint (foo, bar)、元のPython 2にはprintその「引数」リスト内の2つの項目と陳述。後者は、print引数リストに単一のタプルを持つステートメントです。
chepner 2017

定義されてprint("foo" % bar, end=" ")いないため、例は機能しませんbarbarあなたの例には何がありますか?(少なくともPython 3.7を使用している私にとっては)
Qaswed

50

これはどう:

#Only for use in Python 2.6.0a2 and later
from __future__ import print_function

これによりprintprint:)のすべての出現箇所を手動で編集しなくても、Python 3.0スタイルの関数を使用できます。


17

Python 2.7では、ここにそれを行う方法があります

mantra = 'Always look on the bright side of life'
for c in mantra: print c,

#output
A l w a y s   l o o k   o n   t h e   b r i g h t   s i d e   o f   l i f e

Python 3.xの場合

myjob= 'hacker'
for c in myjob: print (c, end=' ')
#output 
h a c k e r 

5
男、あなたは私を数日間混乱させる問題を解決するだけです、私はそれらの笛と昔のシーンを覚えていますが、リリスは覚えていません。
Sphynx-HenryAY 2017年

@ Sphynx-HenryAYは、弟のお手伝いをします
Ritesh Karwa

2番目の例では、h a c k e r 文字の間にスペースがあるようです。私はPython 3.7.3を使用していますが、でスペースをまったく取得していませんend=''
Nagev

@Nagevは '' of end = ''の間にスペースを入れただけです
Ritesh Karwa

おかげで、スペース必要ありません。スペースなしでコードを見たと思っただけですが、出力にスペースがあり、一貫性がないように見えました。
Nagev

5

まず、最初に引用符が抜けていますが、これはおそらくコピー/貼り付けエラーです。

Python 3.xでは、end=' 'パーツは表示された文字列の後に改行ではなくスペースを配置します。Python 2.xで同じことを行うには、最後にコンマを置きます。

print "Building internam Index for %d tile(s) ..." % len(inputTiles),

私はpython 2でこのようなことをすることに興味がありますが、構文はどうなりますか?コンマを追加するとはどういう意味ですか?
レミ

1
@Rémi私の答えのコードはPython 2です...そして、最後のカンマを参照しています。
インタージェイ2015

4

私は彼がPython 3.0を使用していて、あなたはPython 2.6を使用していると思います。


1
いい視点ね!不足している引用符のように、print("foo" % bar, end = " ")Python 2.6で構文エラーをトリガーしますend = " ":)
badp

3

これは単なるバージョンです。Python 3.x以降、印刷は実際には関数なので、通常の関数と同様に引数を取ります。

これend=' 'は、ステートメントの終わりの後に改行文字ではなくスペースが必要だと言っているだけです。Python 2.xでは、printステートメントの最後にコンマを配置してこれを行う必要があります。

たとえば、Python 3.x環境の場合:

while i<5:
    print(i)
    i=i+1

次の出力が得られます。

0
1
2
3
4

どこに:

while i<5:
    print(i, end = ' ')
    i=i+1

出力として与える:

0 1 2 3 4

引数のprint()デフォルト値'\n'を確認できるので、の公式ドキュメントへのリンクが役立つかもしれませんenddocs.python.org/3/library/functions.html#print
Qaswed

それに対応し、最後のスペースで、ここでの出力が「0 1 2 3 4」は「ハッカー」:上記の例のように、最後にスペースを忘れてはいけない
alant

2

開始の二重引用符が欠けているようです。試してください:

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

1

私はおそらく著者が意味したと思います:

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

後の最初の引用がありませんprint(

以下のように、そのノートはPython 3.0print:あなたは、Pythonの古いバージョンを使用している場合と同等のようになり、ステートメントに対立するものとしての機能であります

print "Building internam Index for %d tile(s) ..." % len(inputTiles)

end行が取得するパラメータ手段' '終わりではなく、改行文字で。以前のバージョンのPythonでこれに相当するものは次のとおりです。

print "Building internam Index for %d tile(s) ..." % len(inputTiles),

(イグナシオに感謝)。


1
,最後にa を追加することでそれを行います。
Ignacio Vazquez-Abrams

1

使用する :: python3 filename.py

このようなエラーが発生しました。ドライブにpython2.7とpython3の2つのバージョンがインストールされているために発生しました。以下は私のコードでした:

#!usr/bin/python

f = open('lines.txt')
for line in f.readlines():
        print(line,end ='')

コマンドで実行するとpython lines.py、次のエラーが発生しました

#!usr/bin/python

f = open('lines.txt')
for line in f.readlines():
        print(line,end ='')

python3 lines.py正常に実行したコマンドで実行すると


3
#!/ usr / bin / env python3
Mingliang Liu

1

Python 2.7では同じ問題がありました。引用符なしで" from __future__ import print_function "を使用するだけでこの問題を解決できます。これにより、Python 2.6以降のPython 2.xでPython 3.xの印刷関数を使用できるようになります。


1

Python 2.7で作業している場合は、これを試してください。

from __future__ import print_function

StackOverflowへようこそ:コード、XML、またはデータサンプルを投稿する場合は、テキストエディターでそれらの行を強調表示し、エディターのツールバーの[コードサンプル]ボタン({})をクリックするか、キーボードのCtrl + Kを使用して適切にフォーマットしてくださいそして構文はそれを強調します!
WhatsThePoint

0

今日も同じエラーが発生していました。そして、私は面白いことを経験しました。python 3.xを使用しているにもかかわらずエラーが発生する場合は、それが理由である可能性があります。

同じドライブに複数のpythonバージョンがインストールされています。そして、f5ボタンを押すと、Pythonシェルウィンドウ(バージョン<3.x)がポップアップします。

今日も同じエラーが出て、そのことに気づきました。信頼してください。バージョン3.xの適切なシェルウィンドウからコードを実行すると、満足のいく結果が得られました。


0

ヘッダーend=''はPythonの通常のランタイムに含まれていないため、を使用する前にヘッダーをインポートする必要があります。

from __future__ import print_function

それは今完全に機能するでしょう


0

Python 2と3の両方と 互換性があります。

sys.stdout.write('mytext')

Python 2のみと互換性があります

print 'mytext',

Python 3のみと互換性があります

print('mytext', end='')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.