create or replace function do_exception() returns void as $$
begin
raise exception 'eep!';
end;
$$ language plpgsql;
create or replace function call_do_exception() returns void as $$
begin
PERFORM do_exception();
end;
$$ language plpgsql;
以及:
import psycopg2
conn = psycopg2.connect('');
curs = conn.cursor();
try:
curs.execute("SELECT call_do_exception()")
except psycopg2.InternalError, ex:
saved_ex = ex
我得到一个有上下文的信息:
>>> print saved_ex
eep!
CONTEXT: SQL statement "SELECT do_exception()"
PL/pgSQL function call_do_exception() line 3 at PERFORM
。。。但它也有一个diag字段:
>>> saved_ex.diag
<psycopg2._psycopg.Diagnostics object at 0x7f822e36c150>
除非没有其他选择,否则不要用正则表达式解析消息。如果措辞/格式发生了变化,或者用户处于不同的语言环境中,那么在版本更新时,它会崩溃得很厉害。你认识到这个问题真是太好了。你知道吗
你应该做的是using the ^{} object in the exception 。你知道吗
示例
给出:
以及:
我得到一个有上下文的信息:
。。。但它也有一个
diag
字段:。。。使用单独的消息组件:
相关问题 更多 >
编程相关推荐