Как я могу поймать конкретные исключения из pygresql? - PullRequest
1 голос
/ 31 октября 2019

Я пытаюсь улучшить свою обработку ошибок, в частности, я хотел бы обработать исключения IntegrityError из pygresql.

Я получаю ошибку «NameError: имя« IntegrityError »не определено», поэтому мне нужноимпортировать что-то. Это возможно? Что мне нужно импортировать?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

После того, как я потратил на это большую часть дня, я смог выяснить, что исключения определены в объекте Connection в pgdb (даже если вы используете интерфейс pg). В этом случае я использую декоратор Flask @ app.errorhandler, но он все равно должен показывать, что необходимо импортировать и как его использовать. сделало бы это намного менее запутанным.

0 голосов
/ 31 октября 2019

Определенно возможно и почти всегда желательно отлавливать определенные исключения, которые выдают используемые вами модули.

Вы правы, что вам нужно импортировать это конкретное исключение из пакета, который вы используете, поскольку он не является частью Python, встроенного в исключения.

Глядя на документы pygresql (около стр.88) , кажется, что большинство исключений происходит из pgdbмодуль.

Потенциально;

from pgdb import IntegrityError

# more code...

try:
  db.insert(obj) # or whatever data access methods you have
except IntegrityError as e:
  # handle the exception
  print(str(e))

Или, возможно, модуль pgdb находится внутри модуля pygresql, поэтому он может быть from pygresql.pgdb import IntegrityError. Фактический путь импорта может отличаться, но синтаксис будет таким, как указано выше.

...