Python 从psycopg2异常获取错误消息
这是我第一个广泛使用psycopg2的项目。我正在试图找到一种方法,以便在连接尝试失败时提取psql错误消息。我已经测试过,如果所有变量都设置正确,下面的代码将正常工作,但是每当出现错误情况时(例如,用户选择一个不存在的数据库),Python将提供以下信息:Python 从psycopg2异常获取错误消息,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,这是我第一个广泛使用psycopg2的项目。我正在试图找到一种方法,以便在连接尝试失败时提取psql错误消息。我已经测试过,如果所有变量都设置正确,下面的代码将正常工作,但是每当出现错误情况时(例如,用户选择一个不存在的数据库),Python将提供以下信息: I am unable to connect to the database None Traceback (most recent call last): File "./duplicate_finder.py", line 163,
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'
您正在捕获基类的所有异常
psycopg2.Error
。您的问题可能是diag
属性在psycopg2.5
中是新的。你的版本是什么
>>> print psycopg2.__version__
2.5.1 (dt dec pq3 ext)
当我试图捕获异常时,对于连接错误,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"
我知道这个问题已经问了一年了,但我希望将来可能会对某人有所帮助 类“psycopg2.errors.InvalidCursorName” 关于Django。如果这是您的情况,请确保进行迁移,因为我使用的是Python 3.9(,)
除psycopg2外。错误为e:
log.error(f“{type(e)。{u module}.removesuffix('.errors')}:{type(e)。{u name}:{str(e.rstrip()}”)
如果连接:连接回滚()
其中log
为
连接错误直接存在于psycopg2模块中,而语法错误存在于psycopg2.errors子模块中。每个psycopg2错误消息的末尾都有一个字符。>>导入psycopg2>>>打印psycopg2。uuu版本uuuu 2.0.14(dt dec ext pq3)看起来我落后了几个版本。不幸的是,根据我的发行版(Scientific Linux)的repos+epel,这似乎是最新的版本。可能要用这个去源代码路径。好奇的是,在我着手手动升级psycopg2这一潜在危险的任务之前,有没有办法在psycopg2的旧版本中获取psql connect错误消息,或者当出现问题时,我只能给他们一个通用消息?@sirjames2004我不知道。但是使用
setup
或pip
安装非常简单:。只需记住首先要yum删除psycopg2
。@sirjames2004,psycopg2.5需要python2.5+,谢谢@Loaderon!
Unable to connect!
FATAL: password authentication failed for user "user"