2010-12-31 5 views
5

Ich habe ein extrem verwirrendes Problem festgestellt. Was ich in den Python-Interpreter eintippe, gibt "Ungültige Syntax" zurück. Siehe Beispiele unten. Ich habe versucht, mit der Codepage der Eingabeaufforderung herumzualbern, von der ich den Interpreter abrufe, aber es scheint überhaupt nicht zu helfen.Python Interactive Interpreter gibt immer "Ungültige Syntax" unter Windows

Desweiteren konnte ich diesen speziellen, seltsamen Fehler nicht online finden.

Jede Hilfe, die jemand zur Verfügung stellen könnte, wäre schön. Ich habe bereits versucht, Python neu zu installieren, aber ich hatte kein Glück - das Problem gibt es auch in 3.13 und 2.7.

Ausführen: Python-Version 3.1.3, Windows XP SP3.

Anfahrt:

C:\Program Files\Python31>.\python 
Python 3.1.3 (r313:86834, Nov 27 2010, 18:30:53) [MSC v.1500 32 bit (Intel)] on 
win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 2+2 
    File "<stdin>", line 1 
    2+2 
    ^ 
SyntaxError: invalid syntax 

>>> x = "Oh, fiddlesticks." 
    File "<stdin>", line 1 
    x = "Oh, fiddlesticks." 
         ^ 
SyntaxError: invalid syntax 
+0

Was ist das ...? – user225312

+0

haben Sie versucht, Python neu zu installieren, oder? – Ant

+0

Erneute Neuinstallation sowie die Verwendung von 2.7. Kein Glück so oder so. – user559217

Antwort

0

Einmal, in wie 2002 schaffte ich eine Version von Python zu bauen, die nicht mit Windows Zeilenende laufen konnte. Es würde Syntaxfehler wie diese geben und auf das Ende der Zeile zeigen. Ich finde es sehr unwahrscheinlich, dass es in diesem Fall ein Problem ist, insbesondere, da Sie die Windows-Installation verwenden.

Ich hatte auch ähnliche Probleme, wenn ich versehentlich non-breaking Leerzeichen statt nur Leerzeichen verwendet habe, aber ich sehe nicht, wie das von der Eingabeaufforderung passieren würde, und neben Ihnen 2 + 2 Beispiel verwendet keine Leerzeichen noch Zitate, die auch ein Problem sein könnten.

Welche Kodierungen und Tastatureinstellungen verwenden Sie?

+0

Tastatur ist en-US. Die Codepage in cmd beträgt standardmäßig 437 (US). Die Lokalisierungseinstellungen sind auch en-US. Ich bin mir nicht sicher, welche Daten Sie darüber hinaus benötigen. Ich spreche Windows nicht sehr gut ... – user559217

+0

und danke, dass du dir das mal angeschaut hast. – user559217

+0

@ user559217: Nun, dein Problem ist "unmöglich" und kann nicht passieren. Wenn du dein PC-Setup hast, damit es mit rdesktop ferngesteuert werden kann, könnte ich es mir ansehen, nur weil es so bizarr ist. :) –

4

Jetzt, da das Sample bereinigt wurde, scheint das Problem mit dem Abschluss der Leitung zu sein.

Dies ist keine Lösung, aber was passiert, wenn Sie eine Datei t.py mit diesem Code zu erstellen, ausführen und dann ?: einen Text eintippen

import sys; print(repr(sys.stdin.readline())) 

Wenn Sie mit so etwas wie 2+2 geben Glück wird dir zeigen, was der Python-Interpreter in deinem Beispiel bekommt und das wiederum könnte ein Hinweis auf das Problem sein.

Sie können auch an der Eingabeaufforderung versuchen Sie dies:

python -c "import sys; print(repr(sys.stdin.readline()))" 

Dies ermöglicht Ihnen, eine Zeile zu schreiben und die Details dieser eine Zeile angezeigt werden soll.

+2

Geniale Diagnosetechnik. Die neue Zeile wird jedoch durch "input" und "raw_input" entfernt. Sie müssten 'sys.stdin.readline()' verwenden. –

+0

Wenn es nur ein Newline ist, sollte es nicht das Problem verursachen, aber ich stimme immer noch zu, dass Ihr Vorschlag besser klingt. – Duncan

0

Dies ist eine Sorge:

C:\Program Files\Python31>.\python 

Es ist nie eine gute Idee, Software mit dem aktuellen Verzeichnis in das Software-Installationsverzeichnis eingestellt auszuführen. Sie laufen Gefahr, Dateien zu erstellen, die die Ausführung der Software beeinträchtigen. Wenn Sie anfangen, Fehler und merkwürdiges Verhalten zu bekommen, kann das konsequente Umdrehen die Situation völlig außer Kontrolle bringen.

Das ist besser:

C: \ somewhere_else_with_no_spaces> "c: \ program files \ python31 \ Python"

Am besten ist es zu halten aus "Programmdateien".Wenn ich mich nicht irre, wäre der vorgeschlagene Installationsordner C:\Python31, was gut ist, weil Sie die Anführungszeichen nicht brauchen, wie Sie es immer tun, wenn Sie "Programmdateien" verwenden. Es gibt keinen guten Grund für AFAIK, Software in "Programmdateien" zu haben.

Einige Diagnose:

A. eine Eingabeaufforderung öffnen.
B. Geben Sie Folgendes ein: dir "c:\program files\python31"
C. Kopieren Sie das Ergebnis aus Schritt B in eine Bearbeitung Ihrer Frage, also fügen Sie es nicht in einen Kommentar ein.

Es würde helfen, wenn Sie (in einem redigieren Ihrer Frage) die Frage beantworteten, die jemand über Tastaturmakros fragte ... auch die Möglichkeit der über-intelligenten Tastaturen und der mehrfachen IMEs und nicht die "korrekte " ein. Verhält sich dieses Verhalten auch mit einer anderen Software als Python?

5

Es ist ein bekanntes Problem, wenn Python interaktiv und ungepufferte ausgeführt wird, die zur Fixierung in 3.2 geplant ist - und kann auf ältere Versionen zurückportiert werden, siehe http://bugs.python.org/issue11098

Die böse Sache ist, kann man ungepufferte ich verwenden/Oh, ohne es zu merken. In meinem Fall (Python 2.5.4 (r254: 67916)) hatte ich vor einiger Zeit eine Umgebungsvariable gesetzt, so dass Python immer ungepuffert ausführen würde (unter Windows ist dies PYTHONUNBUFFERED = YES, oder was auch immer nicht leere Zeichenfolge ersetzt für JA) und vergaß es dann. Entfernen der env.var. löste das Problem für mich.

Es lohnt sich also, nach dieser Umgebungsvariablen zu suchen. Es ist nicht standardmäßig eingestellt.

0

Ich habe das gleiche Problem, obwohl es vielleicht nicht das gleiche wie Sie ist, aber es gibt alternative Möglichkeit zur Diagnose, sollten Sie immer eine Verlaufsdatei einrichten.

enter image description here

ich den Grund von vim die History-Datei finden (oder Sie könnten hexdump -C im Falle betrachten vim nicht zeigt nicht die versteckten Zeichen):

enter image description here

Nach http://www.w3.org/International/questions/qa-bidi-controls:

RLM- und LRM-Zeichen

Zwei andere unsichtbare, aber nicht eingebettete Richtungssteuerzeichen , die von Unicode bereitgestellt werden, haben normalerweise kein entsprechendes Markup und sollten entweder als Zeichen oder als Escape-Zeichen verwendet werden. Beachten Sie, dass sie weniger problematisch sind, da sie einzeln verwendet werden, nicht in Paaren, um Textbereiche wie die anderen Steuerzeichen, die wir besprochen haben, zu begrenzen.

U+200E: LEFT-TO-RIGHT MARK 
U+200F: RIGHT-TO-LEFT MARK 

Der Grund ist, weil ich Kopieren/Einfügen von Online-Code direkt (ich weiß es aber in Sicherheit gefährlich ist), die versteckt RLM und LRM-Zeichen enthält.