2013-09-07 8 views
5

Eseguendo AquaEmacs, voglio eseguire un buffer (C-c C-c) in Python.Esegui il buffer AquaMacs che ha "da __future__ import ..."

Il buffer inizia con:

from __future__ import print_function 

L'esecuzione in AquaEmacs inizia con:

import sys,imp 
if'test_one_liners' in sys.modules: 
    imp.reload(test_one_liners) 
else: 
    import test_one_liners 

dove test_one_liners.py è il mio file. Questo dà questo errore:

SyntaxError: from __future__ imports must occur at the beginning of the file 

Qualcuno sa dove e come risolvere questo problema?

Vorrei aggiungere nuovamente le informazioni per chiarire.

Creare questo buffer:

from __future__ import print_function 

print("Hello") 

Utilizzare File/modalità buffer Cambia/Python per renderlo Python e C-c C-c per eseguirlo; non ha bisogno di essere salvato. Il buffer viene scritto in un file temporaneo e non riesce con SyntaxError: from __future__ imports must occur at the beginning of the file. Il traceback include un file generato che contiene un riferimento a un file temporaneo. Cosa dovrebbe accadere invece che stampa Ciao.

risposta

4

Questo era un bug in python-mode.el corretto nella versione corrente. Sembra che aquamac sia fornito in bundle con uno older version of python-mode.el.

Il bug report è qui: bug #1063884 e la correzione here.

È necessario aggiornare il pacchetto python-mode.el.

1
  1. Tu dici from __future__ import print_function, ma il messaggio di errore parla di from __future__ imports --- nota del s alla fine di questo.

  2. Si dice che "test_one_liners.py è il mio file". E tu dici che from __future__ import print_function è all'inizio del "buffer". Ma i messaggi di errore dicono che non trova quell'incantesimo all'inizio del file test_one_liners.py. Forse il tuo attuale buffer, che ha quell'incantesimo, non è per quel file?

Ma se dovessi indovinare, direi che il problema è l'errore di battitura in # 1. ("Apparente", perché potresti semplicemente aver sbagliato a digitare il post e l'incantesimo potrebbe essere corretto nel file.)

+0

1. Sì, il messaggio di errore è in inglese, quindi dice "le importazioni devono essere eseguite all'inizio del file"; il singolare sarebbe una cattiva grammatica. 2. Sì, il * buffer * viene eseguito, con C-c C-c. Il nome del file è rilevante solo per mostrare che è in modalità python.La tua ipotesi è apprezzata, anche se probabilmente ha a che fare con il file exec. Aggiungerò ulteriori informazioni –

1

Come è stato detto, questo è stato risolto nel trunk corrente.

https://launchpad.net/python-mode

Quando si controlla il tuo esempio, ottenere "ImportError: Nessun modulo denominato test_one_liners", che è quello di aspettare.

Il secondo esempio stampa bene "Ciao".