Anda dapat menangkap pengecualian OperationalError dan menyambungkan kembali.
from MySQLdb import OperationalError
try:
my_sql_operation()
except OperationalError as e:
#do what you want to do on the error
reconnect()
print e
Jika Anda secara eksplisit ingin memeriksa apakah koneksi terputus sebelum menjalankan kueri, Anda dapat menjalankan kueri pengujian untuk memeriksa apakah pengecualian terjadi.
Saya tidak yakin dalam kasus apa lagi OperationalError dimunculkan. Tetapi jika Anda ingin menangkap hanya MySQL server has gone away
kesalahan, Anda dapat melakukan sesuatu seperti ini.
from MySQLdb import OperationalError
try:
my_sql_operation()
except OperationalError as e:
if 'MySQL server has gone away' in str(e):
#do what you want to do on the error
reconnect()
print e
else:
raise e()
itu hanya akan menangkap kesalahan 'hilang' dan membiarkan pengecualian OperationalError dimunculkan karena alasan lain.
PERBARUI
Seperti yang saya katakan di komentar, fungsi kueri saya akan seperti ini:
def fetch_data(query):
try:
cursor = conn.Cursor()
cursor.execute(query)
return cursor.fetchall()
except OperationalError as e:
reconnect()
print 'reconnecting and trying again...'
fetch_data(query)
Itu hanya sebuah contoh dan mungkin tidak cocok untuk kasus Anda. Poin yang saya coba sampaikan adalah lebih baik memiliki fungsi yang berbeda untuk hal yang berbeda sehingga Anda dapat menangani situasi ini dengan mudah.