Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AttributeError: 'IntegrityError' object has no attribute 'message' SQLAlchemy

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?

like image 935
kfolw Avatar asked Mar 02 '17 14:03

kfolw


2 Answers

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.

like image 173
snakecharmerb Avatar answered Nov 16 '22 14:11

snakecharmerb


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)
like image 1
portos Avatar answered Nov 16 '22 14:11

portos