我有一个脚本可以将csv复制到postgresql中的数据库中。csv来自不同的来源,因此我必须管理csv格式的不同错误。 基本的代码块就是这样的
import psycopg2
...
connection = psycopg2.connect(
host=host, database=database, user=user, password=password)
try:
file_object = open(cleaned_file)
cur = connection.cursor()
copy_sql = """
COPY %s"""+headers_tostring + """FROM stdin WITH CSV HEADER
DELIMITER as E'""" + delimiter + "'"
copy_sql = (copy_sql + " QUOTE E'" + quote + "'") if quote != '' else copy_sql
copy_sql = copy_sql + " NULL AS ''"
cur.copy_expert(sql=copy_sql % schema_table, file=file_object)
connection.commit()
cur.close()
except psycopg2.ProgrammingError as e:
print ('psycopg2.ProgrammingError')
print(("Unexpected error:", sys.exc_info()[0]))
#do something
connection.rollback()
except psycopg2.DataError as e:
print ('psycopg2.DataError')
print (e)
print(("Unexpected error:", sys.exc_info()[0]))
#do something
connection.rollback()
except psycopg2.errors.BadCopyFileFormat as e:
print ('psycopg2.errors.BadCopyFileFormat')
print (e)
print(("Unexpected error:", sys.exc_info()[0]))
#do something
connection.rollback()
finally:
connection.close()
我的主要问题是,当我得到一个类型为psycopg2.errors.BadCopyFileFormat
的错误时,这个错误像psycopg2.DataError
一样被捕获。
我假设psycopg2.errors.BadCopyFileFormat
是psycopg2.DataError
的子类,因此发生了这种情况。
检查我得到的文档BadCopyFileFormat
是一个SQLSTATE异常类,基类是DataError
,这可以解释这一点
我现在解决了我的问题,更改了我在psycopg2.errors.BadCopyFileFormat
之前和psycopg2.DataError之后放置的块异常的顺序
except psycopg2.errors.BadCopyFileFormat as e:
print ('psycopg2.errors.BadCopyFileFormat')
print (e)
print(("Unexpected error:", sys.exc_info()[0]))
#do something
connection.rollback()
except psycopg2.DataError as e:
print ('psycopg2.DataError')
print (e)
print(("Unexpected error:", sys.exc_info()[0]))
#do something
connection.rollback()
到目前为止,这解决了我当前的问题,但我不确定这是最好的选择,还是我可以得到其他输入的另一个问题
这是管理此异常的最佳方法吗
目前没有回答
相关问题 更多 >
编程相关推荐