2016-02-04 4 views
3

Мы получаем тупик и теряем связь для некоторых наших работ по добыче данных. Задача состоит в том, что мы хотели бы поймать, когда модуль pythssql Python завершится сбоем из-за тупика.Как поймать тупик pymssql как исключение?

File "pymssql.pyx", line 465, in pymssql.Cursor.execute (pymssql.c:6572) 
OperationalError: (1205, 'Transaction (Process ID 113) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.DB-Lib error message 20018, severity 13:\nGeneral SQL Server error: Check messages from the SQL Server\n') 

Мы попытались обернуть наш оператор CURSOR.EXECUTE в try/except, но он не запускается.

try: 
    CURSOR.execute(query) 
except (RuntimeError, TypeError, NameError): 
    print "RuntimeError: {0}".format(RuntimeError) 

Мы видим other examples на SO людей, чей код оказывается заразительным тупики, поэтому мы не уверены, почему наши не выделяющийся.

Любые предложения, как поймать этот тупик?

Когда система выходит из строя, было бы здорово, если бы вы могли прозвучать с помощью бурной или другой тревоги, чтобы сообщить нам об этом.

ответ

0

Я думаю, что это:

try: 
    CURSOR.execute(query) 
except pymssql.InterfaceError as e: 
    print "SQL Interface Error: "+str(e) 

Но я все еще жду ситуации тупика, чтобы произойти, так что я не уверен :) Во всяком случае, ниже будет обрабатывать все pymssql ошибки, в том числе 1205 тупик:

try: 
    CURSOR.execute(query) 
except pymssql.Error as e: 
    print "SQL Error: "+str(e) 
0

Возможно, вам нужно поймать OperationalError.

exception pymssql.OperationalError

Воспитанный на наличие ошибок, которые связаны с работой в базу данных, а не обязательно под контролем программиста, например происходит непредвиденное отключение , имя источника данных не найдено, транзакция не может быть обработана, ошибка выделения памяти произошла во время обработки и т. д. Подкласс DatabaseError.

try: 
    CURSOR.execute(query) 
except OperationalError as e: 
    print "OperationalError : {0}".format(e)