Perché l'utilizzo da __future__ import print_function interrompe la stampa in stile Python2? [chiuso]


135

Sono nuovo nella programmazione con Python e sto provando a stampare con un separatore e terminare ma mi sta ancora dando un errore di sintassi.

Sto usando Python 2.7.

Ecco il mio codice:

from __future__ import print_function
import sys, os, time

for x in range(0,10):
    print x, sep=' ', end=''
    time.sleep(1)

Ed ecco l'errore:

$ python2 xy.py
  File "xy.py", line 5
    print x, sep=' ', end=''
          ^
SyntaxError: invalid syntax
$

4
Hai importato la stampa come una funzione ma la stai ancora trattando come un'istruzione .
jonrsharpe,

4
non puoi chiamare print senza la parentesi perché hai cambiato print in una funzione print (args)
Charlie Parker,

Risposte:


210

Prima di tutto, from __future__ import print_functiondeve essere la prima riga di codice nel tuo script (a parte alcune eccezioni menzionate di seguito). In secondo luogo, come hanno detto altre risposte, ora devi usare printcome funzione. Questo è il punto centrale di from __future__ import print_function; per portare la print funzione da Python 3 in Python 2.6+.

from __future__ import print_function

import sys, os, time

for x in range(0,10):
    print(x, sep=' ', end='')  # No need for sep here, but okay :)
    time.sleep(1)

__future__le istruzioni devono trovarsi nella parte superiore del file perché cambiano le cose fondamentali sulla lingua e quindi il compilatore deve conoscerle dall'inizio. Dalla documentazione :

Una dichiarazione futura viene riconosciuta e trattata appositamente in fase di compilazione: le modifiche alla semantica dei costrutti core vengono spesso implementate generando codice diverso. Può anche accadere che una nuova funzionalità introduca una nuova sintassi incompatibile (come una nuova parola riservata), nel qual caso il compilatore potrebbe dover analizzare il modulo in modo diverso. Tali decisioni non possono essere respinte fino al runtime.

La documentazione menziona anche che le uniche cose che possono precedere __future__un'istruzione sono il docstring del modulo, i commenti, le righe vuote e altre dichiarazioni future.


1
First of all, from __future__ import print_function needs to be the first line of code in your script , Posso sapere perché?
Avinash Raj,

1
@UHMIS, do end=' '.
Cyphase

14
Come ha dichiarato la documentazione ( docs.python.org/2/reference/simple_stmts.html#future ) deve non essere la prima riga: A future statement must appear near the top of the module. The only lines that can appear before a future statement are: the module docstring (if any), comments, blank lines, and other future statements.
ngulam

1
@ngulam, ho fatto le modifiche per menzionarlo, ma non era chiaro nel primo paragrafo, quindi l'ho corretto. Grazie per segnalarlo.
Cyphase

1
@AvinashRaj, non lo so; dovresti chiedere a UHMIS. Ma come ho detto in un commento alla tua risposta, forse OP ha apportato una modifica e non l'ha menzionata. E il primo commento di OP fu che c'era ancora un errore.
Cyphase
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.