Reputation: 171
I was working through a book example on catching exceptions in SQLAlchemy Core using a try/except block:
from sqlalchemy.exc import IntegrityError
ins = insert(users).values(
username="cookiemon", #This username is already in db,
email_address="[email protected]", 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)
However, I get the following error message:
AttributeError: 'IntegrityError' object has no attribute 'message'
This is verbatim from the book example, why can't I display the error message?
Upvotes: 17
Views: 11660
Reputation: 11
def __str__(self):
return str(self.args[0]
if len(self.args) <= 1
else self.args)
Then, replace:
print(error.orig.message, error.params)
with:
print(error)
Upvotes: 1
Reputation: 55589
In Python3, exceptions no longer have the message attribute, they have args. See python.org/dev/peps/pep-0352/#transition-plan
Credit Ilja Everilä in this comment.
Upvotes: 5
Reputation: 923
it's not error.orig.message make it
print(error.message)
will return this
(sqlite3.IntegrityError) NOT NULL constraint failed: users.gender
Upvotes: -1