On Thu, 19 Nov 2020 at 15:42, Patrick Starrenburg
<patrick.starrenb...@gmail.com> wrote:

> I am using psycopg2 in a Django app. In my code I am checking for various 
> exceptions, one of which is foreign key violations.
>
> I see in the psycopg2 docs https://www.psycopg.org/docs/errors.html that 
> ForeignKeyViolation
> is under the base IntegrityError exception. I would like to be able to 
> specifically catch, and respond to the ForeignKeyViolation error. I am coding 
> using the recommendation in the docs (below).
>
> It is working (a forced FK violation is specifically caught) my question is 
> though that in my IDE (PyCharm) it reports that it cannot find the reference 
> 'errors' and I cannot use dotted links to drill down to the 
> errors.ForeignKeyViolation function.
>
> I can type psycopg2.IntegrityError and reference to it is found (and I see 
> that it is listed in the __init.py__ file).
>
> When I Google this some say it is a PyCharm bug, some say that PyCharm is 
> following the Python package convention.

Yes, it is a PyCharm shortcoming: the exception is there:

    >>> import psycopg2.errors
    >>> psycopg2.errors.ForeignKeyViolation
    psycopg2.errors.ForeignKeyViolation

The exceptions are defined in the C module, but they are exposed in
the errors module. If you look at the source code for the module, it
appears mostly empty: the exceptions are added there when the
psycopg2._psycopg internal module is imported.

Personally this is good enough: the module works as expected for all
Python code; supporting PyCharm is not mandatory as far as I'm
concerned. I am happy to receive patches to make PyCharm work better,
but working on it myself isn't my priority now.

-- Daniele


Reply via email to