Из документации Python :
Оператор try может содержать несколько единиц, кроме условия, для указания обработчиков для различных исключений.
Например:
try:
do_something_crazy
except AttributeError:
print 'there was an AttributeError'
except NameError:
print 'there was a NameError'
except:
print 'something else failed miserably'
Последнее, кроме как действует здесь как ловушка, и выполняется только в том случае, если возникает исключение, отличное от AttributeError или NameError. В производственном коде лучше держаться подальше от такого универсального за исключением предложений, потому что, как правило, вы хотите, чтобы ваш код отказывал всякий раз, когда возникает ошибка, которую вы не ожидали.
В вашем конкретном случае вам нужно будет импортировать различные исключения, которые могут быть вызваны из модуля dbi, чтобы вы могли проверять их в других, кроме случаев.
Так что-то вроде этого:
# No idea if this is the right import, but they should be somewhere in that module
import dbi
try:
cursor.execute("delete from TABLE")
except dbi.internal-error:
print 'internal-error'
except dbi.program-error:
print 'program-error'
Как вы увидите на вышеупомянутой странице документации, вы можете включить дополнительные атрибуты в каждое предложение кроме. Это позволит вам получить доступ к фактическому объекту ошибки, который может понадобиться вам в какой-то момент, когда вам необходимо различать два разных исключения одного и того же класса. Даже если вам не нужен такой высокий уровень разграничения, все же будет хорошей идеей сделать немного больше проверок, чем я описал выше, чтобы убедиться, что вы действительно имеете дело с ошибкой, с которой, по вашему мнению, вы сталкиваетесь.
Все, что сказано и сделано в отношении try / кроме того, что я действительно рекомендую, - это поиск метода в коде библиотеки базы данных, который вы используете, чтобы проверить, существует ли таблица или нет, прежде чем пытаться с ней взаимодействовать. Структурированные попытки / исключения очень полезны, когда вы имеете дело с внешним вводом, который необходимо проверить и санировать, но защитное кодирование вокруг предполагаемого существования таблицы базы данных звучит как нечто, что собирается повернуть вас назад и укусить позже.