Python 使用psycopg2和pandas处理错误查询产生的错误

Python 使用psycopg2和pandas处理错误查询产生的错误,python,pandas,psycopg2,Python,Pandas,Psycopg2,我有一个函数,它使用psycopg2查询postgres服务器并返回一个数据帧 有两个主要问题可能导致功能失败 1) 服务器已关闭-这由psycopg2.OperationalError异常处理。我可以使用它让用户意识到他们应该检查服务器是否已启动 2) 用户输入了错误的查询 第二个是我需要帮助的。我认为这是一个数据库错误。我想将此作为一个例外,并向用户打印一条消息以更正其查询 代码示例如下: conn = None query = 'SELECT nonsense from schema1.t

我有一个函数,它使用psycopg2查询postgres服务器并返回一个数据帧

有两个主要问题可能导致功能失败

1) 服务器已关闭-这由psycopg2.OperationalError异常处理。我可以使用它让用户意识到他们应该检查服务器是否已启动

2) 用户输入了错误的查询

第二个是我需要帮助的。我认为这是一个数据库错误。我想将此作为一个例外,并向用户打印一条消息以更正其查询

代码示例如下:

conn = None
query = 'SELECT nonsense from schema1.table'
try:
    conn = pyscopg2.connect(params)
    df = pd.read_sql_query(query,conn)
except (psycopg2.OperationalError,psycopg2.DatabaseError) as e:
    print (f'Query failed!\n\n{e})
对于上述不正确的查询,我希望错误消息是“query failed!”,然后错误将显示在下面

目前我只得到:

DatabaseError: Execution failed on query 'SELECT nonsense from schema1.table': column "nonsense" does not exist
LINE 1: SELECT nonsense from schema1.table

您应该/可以在级别上处理错误

处理
pandas.io.sql.DatabaseError
对我来说很有效:

from pandas.io.sql import DatabaseError 

try:
    # ...
    df = pd.read_sql_query(query, conn)
except DatabaseError as e:
    print (f'Query failed!\n\n{e}')

这绝对是正确的做法。谢谢你的提醒。