这是我第一个广泛使用 psycopg2 的项目。我正在尝试找到一种方法来提取连接尝试失败时的 psql 错误消息。我已经测试过,如果所有变量都设置正确,下面的代码将起作用,但是每当发生错误情况(例如,用户选择了一个不存在的数据库)时,Python 都会给我以下信息:
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'
是否有一种简单的、包罗万象的方法来捕获连接失败时 psql 生成的任何错误消息,或者我是否需要为多个 psycopg2 异常编写 except block ?
从我的脚本中提取:
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()
最佳答案
当我 try catch 异常时,对于连接错误,e.pgerror 始终为 None。以下代码块通过直接打印“e”来解决这个问题。
try:
conn = psycopg2.connect(conn_string)
except psycopg2.OperationalError as e:
print('Unable to connect!\n{0}').format(e)
sys.exit(1)
else:
print('Connected!')
# do stuff
例如密码验证失败的情况:
Unable to connect!
FATAL: password authentication failed for user "user"
我意识到这个问题已有一年之久,但希望将来能对某人有所帮助
关于python - 从 psycopg2 异常中获取错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24332005/