2012-04-04 18 views
4

Ich versuche, in eine Datei zu schreiben, aber es funktioniert nicht. Ich bin Schritt für Schritt mit dem Debugger durchgegangen (es geht zum Schreibbefehl, aber wenn ich die Datei öffne, ist sie leer).Fehler beim Schreiben in Datei, aber kein Fehler generiert

Meine Frage lautet entweder: "Wie kann ich sehen, was der Fehler ist, damit ich debuggen kann?", "Was kann schief gehen, wenn man versucht, in eine Datei zu schreiben, die sich so verhält?".

sqlScript = open('script-file.sql', 'a') 

    try: 
     sqlScript.write(sqlLine) 
    except IOError as (errno, strerror): 
     print "I/O error({0}): {1}".format(errno, strerror) 

Dies sollte einfach sein, aber ich kann nicht scheinen, eine Antwort zu finden. Außerdem entschuldige ich mich im Voraus, da Englisch eine zweite Sprache ist.

Edit: Ich habe eine Print-Anweisung kurz zuvor und die Zeichenfolge ist nicht leer.
Edit2: Ich benutze Python 2.6, wenn das irgendwie eingreift.

Edit 3: Ich habe eine "Lösung" zu meinem Fehler gefunden. Ich entschied mich zu versuchen, mein Skript mit IDLE anstelle von PyCharm laufen zu lassen und es funktioniert wie ein Zauber (Wortspiel beabsichtigt). Ich habe keine Ahnung warum, aber da ist es. Irgendein Grund, warum das passieren würde ?!

+1

Was meinst du mit "es funktioniert nicht"? Generiert es die Ausnahme, die Sie fangen? Oder wird keine Ausnahme generiert? – alan

+0

Haben Sie die Datei im Python-Prozess geschlossen oder geleert, bevor Sie sie untersucht haben? –

+0

Alan: Es erzeugt keinen Fehler. Larsmans: Ich öffne es nur zum Anhängen. – Boona

Antwort

2

Mit dem folgenden Code können Sie sehen, welche Ausnahme ausgelöst wird, und eine Ablaufverfolgung für den Ursprung anzeigen.

try: 
    sqlScript.write(sqlLine) 
except: 
    print "Unexpected error:", sys.exc_info()[0] 
    raise 

Siehe http://docs.python.org/tutorial/errors.html für weitere Informationen.

+0

Ich habe Ihren Code verwendet und bekomme keinen Fehler. Es ist wirklich seltsam. – Boona

+0

@Boona Sind Sie sicher? Das scheint ziemlich seltsam zu sein. Es werden keine unerwarteten Fehlermeldungen auf Ihrer Konsole angezeigt. –

0

Wenn keine Ausnahme geworfen wird, würde ich vermuten, dass die String-Variable 'sqlLine' leer ist.

Haben Sie es vor der write-Anweisung gedruckt?

+0

Ich habe eine Print-Anweisung kurz zuvor und die Zeichenfolge ist nicht leer. – Boona

4

Aufbauend auf Chris Morris' Antwort, tun vielleicht so etwas wie folgt aus:

try: 
    sqlScript.write(sqlLine) 
except Exception as e: 
    print type(e) 
    print str(e) 

Dies wird eine Ausnahme geworfen fangen (vorausgesetzt, es ist eine Unterklasse von Exception ist, natürlich) und sagen Ihnen, den Typ und die Fehlermeldung .

Es ist auch möglich, mehrere except: Fälle für verschiedene mögliche Ausnahmen zu definieren, also versuchen Sie es möglicherweise für jede Ausnahme, die potenziell ausgelöst/ausgelöst werden könnte.

+0

Danke für Ihre Hilfe, aber immer noch kein Fehler. – Boona

0

Sind die Schlüsselwörter im Skript in Kleinbuchstaben? Das gleiche ist mir in einem anderen db passiert und ich habe es gelöst, indem ich die Wörter in UPPERCASE geändert habe.

+0

Ich kann das Skript nicht einmal ausführen, da ich es nicht in die Datei schreiben kann. : P (Hinweis: Ich schreibe nicht direkt in die Datenbank, sondern erzeuge ein Skript, das zu einem späteren Zeitpunkt ausgeführt wird.) – Boona

+0

Kannst du etwas aus dem Inhalt von sqlLine zeigen? –

+0

Ich habe gerade das Problem gefunden. Als ich es mit IDLE anstelle von PyCharm versuchte, funktionierte es. Ich habe keine Idee warum. : P – Boona

0

Ihr aktuelles Arbeitsverzeichnis ist nicht das, was Sie erwarten, und es ist erfolgreich, in einem anderen Verzeichnis einige script-file.sql zu schreiben. Versuchen Sie, os.getcwd() zu drucken und stellen Sie sicher, dass es das ist, was Sie erwarten, und schauen Sie in diesem Verzeichnis nach.

+0

Interessant! Ich überprüfte und es ist das Verzeichnis, das ich erwartet hatte. – Boona

0

es auf meinem Linux-Umgebung passiert ist, aber die Arbeit an Fenstern versuchen

sqlScript = open('script-file.sql', 'a', buffering=False) 

oder

sqlScript = open('script-file.sql', 'a', 0) 
Verwandte Themen