属性错误:'IntegrityError'对象没有'message'属性 SQLAlchemy

17

我正在按照书本上的例子使用try/except块来捕获SQLAlchemy Core中的异常:

from sqlalchemy.exc import IntegrityError
ins = insert(users).values(
    username="cookiemon",            #This username is already in db, 
    email_address="damon@cookie.com", should throw an IntegrityError 
    phone="111-111-1111",             for violating unique constraint
    password="password"
    )
try:
    result=connection.execute(ins)
except IntegrityError as error:
    print(error.orig.message, error.params)

然而,我遇到了以下错误信息:

AttributeError: 'IntegrityError' 对象没有 'message' 属性

这是从书中的例子直接复制的,为什么我不能显示错误消息呢?


20
你正在使用Python 3?异常不再具有message属性,而是有args。请参考http://www.python.org/dev/peps/pep-0352/#transition-plan。 - Ilja Everilä
2
是的,我正在使用Python 3.5。好的,我刚刚改用print(error.args),并成功打印了错误信息。谢谢! - kfolw
应该将第一个评论添加为答案。 - danday74
3个回答

5

1
def __str__(self):
    return str(self.args[0]
                if len(self.args) <= 1
                else self.args)
    

然后,替换为:

print(error.orig.message, error.params)

使用:

print(error)

你好,portos,欢迎。如果您提供代码片段的解释以及其有用之处,未来的人们将感激您。 - Beefster

-1

不是error.orig.message的问题,解决它

print(error.message)

将返回此内容

(sqlite3.IntegrityError)NOT NULL约束失败:users.gender


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接