python學習筆記(十五)異常處理
阿新 • • 發佈:2018-05-15
關鍵字 .exe strip support 異常 解析器 輸入 rod ()
python解析器去執行程序,檢測到了一個錯誤時,觸發異常,異常觸發後且沒被處理的情況下,程序就在當前異常處終止,後面的代碼不會運行,所以你必須提供一種異常處理機制來增強你程序的健壯性與容錯性 。
例如,我們定義一個函數
first = input(‘請輸入除數:‘) second = input(‘請輸入被除數:‘) first = int(first) second = int(second) res = first/second li = [1,2,3,4] print(li[5])
如果除數second=0,那代碼就會拋異常,ZeroDivisionError: division by zero ,除數是不能為0的。
如果除數輸入是字符串,那麽代碼也會拋異常,TypeError: unsupported operand type(s) for /: ‘int‘ and ‘str‘
這時就需要捕捉異常了,當除數為0時提示用戶所傳參數不對。異常處理使用的是try .... except.....關鍵字。
first = input(‘請輸入除數:‘) second = input(‘請輸入被除數:‘) try: first = int(first) second = int(second) res = first/second except ValueError as e: #這個e代表錯誤信息,如果上面的兩行代碼出現了 ValueError這個錯 print(e) print(‘請輸入整數‘) except ZeroDivisionError as e: print(e) print(‘除數不能為0‘)
當異常種類很多的時候,我們可以統一寫為except Exception as e:
first = input(‘請輸入除數:‘) second = input(‘請輸入被除數:‘) try: first = int(first) second = int(second) res = first/second except Exception as e: #上面代碼出異常的時候走這裏, print(e) print(‘出錯了。。。。。‘)
else: #沒有出錯,也不是必須寫的
print(‘並沒有出錯‘)#這個是沒有異常的時候走
print(res)
finally:#不管出錯或者沒有出錯都會執行它,也不是必須寫的。
print(‘我是finally‘)
現在我們完善一下操作數據庫的函數
1.數據庫在連接不成功時會拋異常
2.在執行sql的時候,如果sql語句寫的不正確也會拋異常
def my_db2(sql): try: coon = pymysql.connect( **MYSQL_INFO ) except Exception as res: print(‘數據庫連接失敗了‘) return ‘數據庫連接失敗了‘ cur = coon.cursor() # 建立遊標 try: cur.execute(sql)#執行sql except Exception as res: print(‘sql出錯,sql是%s‘%sql) return ‘sql出錯‘ else: if sql.strip()[:6].upper()==‘SELECT‘: res = cur.fetchall() else: coon.commit() res = ‘ok‘ finally: cur.close() coon.close() return res
python學習筆記(十五)異常處理