Immer Fehlermeldungen aus psycopg2 Ausnahmen
Dies ist mein erstes Projekt mit psycopg2 ausgiebig. Ich versuche einen Weg zu finden, extrahieren Sie die psql-Fehlermeldung, wenn ein Verbindungsversuch fehlschlägt. Getestet hab ich den code unten funktioniert, wenn alle Variablen richtig gesetzt sind, aber wenn ein Fehler Auftritt (z.B. Benutzer wählt eine Datenbank, die nicht vorhanden ist), Python geben mir die folgenden:
I am unable to connect to the database
None
Traceback (most recent call last):
File "./duplicate_finder.py", line 163, in <module>
main(sys.argv[1:])
File "./duplicate_finder.py", line 142, in main
print e.diag.message_detail
AttributeError: 'OperationalError' object has no attribute 'diag'
Gibt es eine einfache, catch-all-Methode zu fangen, was auch immer Fehlermeldung psql erzeugt, wenn eine Verbindung fehlschlägt, oder muss ich schreiben, außer Blöcken für mehrere psycopg2 Ausnahmen?
Auszug aus meinem Skript:
import sys, getopt, os, time, csv, psycopg2
...
...
conn_string = "host=" + dbhost + " dbname=" + database + " user=" + dbuser + " password=" + dbpass
try:
conn = psycopg2.connect(conn_string)
except psycopg2.Error as e:
print "Unable to connect!"
print e.pgerror
print e.diag.message_detail
sys.exit(1)
else:
print "Connected!"
cur = conn.cursor()
cur.execute("SELECT id, lastname, firstname, location FROM test ORDER BY ctl_upd_dttm DESC;")
print cur.fetchone()
...
conn.close()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie fangen alle Ausnahmen mit der Basis-Klasse
psycopg2.Error
. Dein problem ist wahrscheinlich, dass diediag
Attribut ist neu inpsycopg2 2.5
. Was ist Ihre version?setup
oderpip
ist ganz einfach: initd.org/psycopg/install. Denken Sie daran, zuyum remove psycopg2
ersten.Wenn ich versuche, Sie zu fangen, Ausnahmen e.pgerror ist immer Keine Verbindung-Fehler. Der folgende code-block wird, um dieses durch die direkte drucken 'e'.
Beispielsweise im Fall von Passwort-Authentifizierung fehlgeschlagen:
Merke ich, diese Frage ist ein Jahr alt, aber hoffentlich kann jemand helfen, in der Zukunft