2015-12-15 42 views
0

我想在連接到數據庫時發生異常,但沒有連接,但我總是凍結在pyodbc.connect(connstr)。我嘗試了所有來自documentation的錯誤,只是嘗試了「除了Exception」,但我看到我的程序在無法連接到數據庫時凍結,並且除了部分之外不檢查。 (凍結是由數據庫和程序我的目的斷線造成的少了點什麼(窗「無應答」),直到我硬重置):在pyodbc中處理異常(當沒有連接時)

import pyodbc 
    connstr=('DRIVER={SQL Server Native Client 11.0};Server="server_ip";port=1433;Network Library=DBMSSOCN;Database="name";uid="uid";pwd="pwd";') 
    try: 
     print("I'm here - no problem") 
     conn=pyodbc.connect(connstr) 
     print("of course not here") 
    except ...no_matter_what_I_write_here... : 
     print("but never there too") 
+0

是由一個長超時凍結?請顯示輸出... – Pynchia

+0

沒有輸出,沒有錯誤,沒有什麼 – mpruchni

+0

ok,然後檢查'pyodbc.connect'的文檔以查看錯誤情況下的行爲以及是否有任何參數/ global cfg you可以設置更改超時限制 – Pynchia

回答

0

這是太簡單了(感謝您Pynchia的建議):

try: 
    conn=pyodbc.connect(connstr, timeout=5) 
except pyodbc.Error as err: 
    print("Couldn't connect") 
0

假設你沒有連接上線。 Coz Signals在非主線程中不起作用。

import signal 
from contextlib import contextmanager 

class TimeoutError(Exception): pass 

@contextmanager 
def time_limit(seconds): 
    def signal_handler(signum, frame): 
     raise TimeoutError("Time out") 
    signal.signal(signal.SIGALRM, signal_handler) 
    signal.alarm(seconds) 
    try: 
      yield 
    finally: 
      signal.alarm(0) 


try: 
    with time_limit(10): 
      conn=pyodbc.connect(connstr)  
except TimeoutError as e: 
     print "couldn't connect for long time" 
相關問題