9月13日学习内容整理:异常处理
一、異常處理
1、排錯:多行報錯的時候,真正報錯的是最下面;若報錯的地方在別人的代碼里,注意別人寫的代碼是不會報錯的,還是找自己的錯
2、特點:一旦發生異常,程序不會再向下執行
3、處理方法:
(1)用if語句去規避,但是成本太高
(2)沒法用if處理的報錯,就用異常處理去解決報錯
4、異常處理的辦法
(1)try和except的組合:
try:a except NameError:print(123) 1)try中是要執行的代碼,當遇到except后面的錯誤類型時就會執行except中的代碼,try中的代碼就會停留在異常報錯的地方,并且不會向下執行,當except中的代碼處理完后,程序就會繼續向下執行try和except語句外部的代碼
2)try和except是一體的,不能分開用
3)except只能處理一種報錯類型,所以except可以有多個分支去處理多個報錯類型
try:num = input('num : ')int(num) # ValueErrorprint(num)asum(1, 2, 3) except ValueError:print('請輸入一個數字') except NameError as nameerror:print('產生了一個%s'%nameerror) except TypeError:print('又一個錯誤誕生了')
(2)as語句的用法:except ?異常類型 ?as ?變量名:print(變量名)變量名就是這個異常類型的具體內容
? 一般用在不確定錯誤的內容是什么
(3)萬能異常:except ?Exception:就代表所有的異常類型,都可以進行處理
? 放在所有except分支的最后
? 對于預料不到的異常用萬能,能預料到的異常還是用分支去處理
(4)try except和else的組合:
若try中的代碼被順利執行并且沒有出發異常處理(except),程序就會執行else中的代碼。跟for和while中的else用法類似
(5)try except和finally的組合
1)finally語句中的代碼不管有沒有觸發異常處理(except)都會被執行
2)主要做一些清理的工作,例如關閉文件,因為try中的遇到異常就會停止不會向下執行。避免因為程序異常造成的浪費資源和邏輯問題
3)注意和函數的用法:當函數的return在finally的前面時,函數運行到return時不會停止,而是會繼續執行finally中的代碼,當finally中的代碼執行完后,函數才停止,然后外部接受的返回值才能打印出來
(6)try except else和finally的組合:這就是一個完整的異常處理機制。
(7)主動觸發異常:raise 異常類型 ?目的就是告訴別人這里需要修改
(8) 斷言:相當于if判斷
assert 條件 ?條件不成立時下面的代碼不會執行。可以用來對使用者進行一些條件的約束
?
注意:
1、異常處理不要隨意用,寫個代碼就用一下,異常處理是為了規避一些潛在的報錯以提高用戶體驗度
2、try語句里的代碼要盡量少,在代碼開發階段不要隨意調用函數,這樣的話函數里的錯誤就不會顯示了;在代碼應用階段為防止用戶使用時函數頻繁報錯就可以在try語句中調用函數。
?
?
?
?
常用異常:
AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x
IOError 輸入/輸出異常;基本上是無法打開文件
ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊
IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
KeyError 試圖訪問字典里不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個還未被賦予對象的變量
SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError 傳入對象類型與要求的不符合
UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是由于另有一個同名的全局變量,
導致你以為正在訪問它
ValueError 傳入一個調用者不期望的值,即使值的類型是正確的
?
?
更多異常:
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
?
轉載于:https://www.cnblogs.com/wanghl1011/articles/7514206.html
總結
以上是生活随笔為你收集整理的9月13日学习内容整理:异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 打印SQL
- 下一篇: 工作中系统报错:数据库连接失败怎么办?