day17-異常處理

今天的內容比較少,只是單獨的異常處理python

開始今日份整理程序員

1.異常spa

定義:異常時錯誤發生的信號,一旦出錯,而且程序沒有處理這個錯誤,就會拋出異常,而且程序會運行停止code

2.異常的分類blog

2.1語法錯誤:python會在運行以前,會先檢查語法是否錯誤,這個是程序員代碼中不該該出現的,須要時刻注意ip

2.2邏輯錯誤:(常見)input

  • ValueError
  • NameError
  • IndexError
  • KeyError
  • AttributeError
  • TypeError
  • Exception:萬能錯誤參數

3.異常的處理io

  • 強調一:對於錯誤的條件能夠預知的,此時應該用if判斷來預防
  • 強調二:對於錯誤發生的條件不可預知的,應該用異常處理機制進行判斷

第一種方式:單分支機構,try………except………class

try:
    l1 = [1,2,3]
    l1[100]  # IndexError
    print(333)
    print(5555)
    # dic = {'key1':'v1'}
    # dic['key2']  # KeyError
    print(777)
except IndexError as e:
    print(e)

第二種方式:多分支機構,try .except  except ....多支語法

try:
    l1 = [1,2,3]
    # l1[100]  # IndexError
    print(333)
    print(5555)
    dic = {'key1':'v1'}
    # dic['key2']  # KeyError
    num = int(input('請輸入選項:'))
    print(777)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)

第三種方式:萬能異常  Exception

try:
    l1 = [1,2,3]
    # l1[100]  # IndexError
    print(333)
    print(5555)
    dic = {'key1':'v1'}
    # dic['key2']  # KeyError
    num = int(input('請輸入選項:'))
    print(777)
except Exception as e:
    print(e)

# 以上這三種分狀況討論:
# 1,若是你對報錯信息不關係,只是想直接跳過報錯而不分流執行代碼。 萬能異常最好。
# 2,若是你想要捕捉具體的錯誤信息,根據不一樣的錯誤執行不一樣的分支。多分支比較好

第四種方式:多分支加萬能異常

try:
    num = input('請輸入你要辦理的業務:').strip()
    num = int(num)
    menu_dict[num]()
except ValueError:
    print('請輸入數字')
except KeyError:
    print('超出範圍,請從新輸入')
except Exception:
    print("出現未知錯誤.....")

第五種方式,主動觸發異常,以前有用過,

try:
    raise TypeError('類型錯誤')
except Exception as e:
    print(e)

第六種方式,斷言,代碼完成有明確的結果

assert ('name' in info)and ('age' in info)
#有着明確的結果

第七種方式,自定義異常類型,

畢竟異常的種類不是一成不變的,有可能異常的種類仍是一直在增長,這個時候就須要本身建立一個異常種類了

class PhoneconnectionError(BaseException):#手機鏈接失敗
    pass

try:
    raise PhoneconnectionError('鏈接錯誤...')
except PhoneconnectionError as e:
    print(e)

 

最後的最後,在代碼中儘可能少用try開頭,except 結尾,這樣根本看不到本身的代碼有什麼問題。

相關文章
相關標籤/搜索