Python穩基修煉之異常處理
錯誤與異常
1、區分錯誤與異常
兩種錯誤(都必須改正): 語法錯誤(程式碼不規範,格式不對或缺少符號)、邏輯錯誤(邏輯不通)
異常: 程式執行時發生錯誤的訊號
2、異常處理與注意事項
異常處理: 程式設計師特意去捕捉異常,如果捕捉成功,就進入另外一段你定義的邏輯裡去執行,使程式不會崩潰
注意: 異常處理的邏輯應該是與程式的主邏輯的分離開的;根本不會有人去用執行到一半就崩潰的軟體,所以我們必須提供一種異常處理機制來增強我們程式的健壯性和容錯性
各種異常
1、常見異常
AttributeError 試圖訪問一個物件沒有的屬性,比如test.a,但是test沒有屬性aIOError 輸入/輸出異常;基本上就是無法開啟檔案ImportError 無法引入模組或包;基本上就是路徑問題或名稱錯誤IndentationError 語法錯誤(的子類) ;程式碼沒有正確縮排或對齊IndexError 下標索引超出序列邊界,比如當a只有三個元素,卻試圖訪問a[5]KeyError 鍵異常,試圖訪問字典裡不存在的鍵KeyboardInterrupt Ctrl+C被按下NameError 使用一個還未被賦予物件的變數SyntaxError Python程式碼非法,程式碼不能編譯(基本上就是語法錯誤)TypeError 傳入物件型別與要求的不符合UnboundLocalError 試圖訪問一個還未被設定的區域性變數,基本上是由於另有一個同名的全域性變數,導致你以為正在訪問它ValueError 值異常,傳入一個呼叫者不期望的值,即使值的型別是正確的
2、其他異常
ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionFloatingPointErrorFutureWarningGeneratorExitImportErrorImportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrorNameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorStopIterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZeroDivisionError
這些異常都比較少見,所以也沒有必要全部列出來是哪方面的異常,太多了也記不住,所以可以遇到再去搜尋這些少見的異常的解決方案
異常處理
1、if判斷式
while True: cou = input('請輸入你的賬號:\n') if cou.isdigit(): #主邏輯,如果全是數字才執行轉換int格式操作 int(cou) break #下面幾個就為異常準備的邏輯,在寫程式時就應該考慮到各種可能出現的異常 elif cou.isspace(): print('賬號內不應有空格,請重新輸入') continue elif len(cou)==0: print('您輸入的長度為0,請重新輸入') elif cou.isalpha(): print('賬號內不應有字母,請重新輸入') else: print('輸入內有其他非法輸入,請重新輸入') 123456789101112131415 複製程式碼
執行結果:
![if判斷式](https://img-blog.csdnimg.cn/20200319173421582.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ZpZXdpbmZpbml0ZWx5,size_16,color_FFFFFF,t_70)
\*\*if判斷式的缺點:\*\* 只能針對某一段程式碼,對於不同的程式碼段的相同錯誤型別需需要寫重複的if來進行處理,顯得非常贅餘,可讀性極其差
2、try … except …異常處理
while True: try: #主邏輯 cou = input('請輸入數字:\n') int(cou) cou2 = input('請再輸入數字:\n') int(cou2) except ValueError as e: #ValueError是異常型別,表示如果出現值的異常,就執行except下的邏輯 print(e,'請重新輸入') except KeyError as e: #如果出現鍵的異常 print(e,'請重新輸入') except IndexError as e: #如果出現語法異常 print(e,'請重新輸入') except Exception as e: #如果出現其他異常 print(e,'請重新輸入') else: print('try內的程式碼沒有異常就執行else') #沒有異常就會執行else的內容 finally: print('無論try中有無異常,finally都會執行') break #常用來做清理記憶體操作,或者跳出迴圈 123456789101112131415161718192021222324 複製程式碼
執行結果:
![exectp異常處理](https://img-blog.csdnimg.cn/20200319173821599.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ZpZXdpbmZpbml0ZWx5,size_16,color_FFFFFF,t_70)
3、主動異常
name = 'ViewIn' try: raise TypeError('型別錯誤') #用raise主動觸發異常 except Exception as e: print(e) 12345 複製程式碼
執行結果:
![主動異常](https://img-blog.csdnimg.cn/20200319173928221.png)
4、斷言
print('---------------------------line1') assert 1 == 1 print('===========================line2') #如果assert的表示式成立,則繼續執行,否則程式終止 #相當於 if 1 != 2: raise AssertionError #主動丟擲一個異常 #斷言後面有一萬行程式碼 123456789 複製程式碼
執行結果:
![斷言]( https://img-blog.csdnimg.cn/20200319174008429.png)
結束!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69984138/viewspace-2728800/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python 基礎之異常處理Python
- Python基礎 -- 異常處理Python
- python異常處理之returnPython
- Python異常處理Python
- Python——異常處理Python
- 異常處理機制(二)之異常處理與捕獲
- python try異常處理Python
- python異常捕捉處理Python
- Python學習之 異常處理詳解Python
- 2.1.3 Python物件導向之異常處理Python物件
- JavaSE基礎:異常處理Java
- 【Java基礎】--異常處理Java
- NodeJS之異常處理NodeJS
- dns異常怎麼修復 dns配置異常怎麼處理DNS
- Python之錯誤異常和檔案處理Python
- 異常篇——異常處理
- Python Selenium異常處理Python
- python應用:異常處理Python
- Python 中的異常處理Python
- Python異常處理機制Python
- python異常處理詳解Python
- PHP基礎:異常處理ExceptionPHPException
- Python錯誤處理和異常處理(二)Python
- Java之異常處理try{}catch(){}Java
- Reactor詳解之:異常處理React
- JAVA學習之異常處理Java
- 溫故之.NET異常處理
- Hprose-java之異常處理ROSJava
- Node.js之異常處理Node.js
- 異常處理
- Python基礎入門(7)- Python異常處理機制Python
- Python入門學習之異常處理機制Python
- Python進階08 異常處理Python
- python URLError,HTTPError 的異常處理PythonErrorHTTP
- Oracle開發基礎-異常處理Oracle
- Flask開發技巧之異常處理Flask
- 【java學習之再遇異常處理】Java
- 異常-throws的方式處理異常