matlab實現跨表自動對應標題填寫資料
阿新 • • 發佈:2021-09-16
錯誤與異常
Error錯誤:
- 語法錯誤,在編譯程式碼階段就能檢測出來;
print(aaa
if :
- 邏輯錯誤,在執行過程中顯現出來。
num=input("請輸入數字:")
get_sum=1+int(num) #當輸入的是一個字串aaa時,int("aaa")就會發生邏輯錯誤
Exception異常:
在執行程式碼的過程發生的中斷程式的事件,一個異常標識一種錯誤。例如:
print("aaa")
print(name)
print("end")
輸出: 在執行到第二個print的時候name沒有定義,報錯。
常用異常:
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
異常處理
概念
什麼是異常處理?
python直譯器檢測到錯誤,觸發異常(也允許程式設計師自己觸發異常)
程式設計師編寫特定的程式碼,專門用來捕捉這個異常(這段程式碼與程式邏輯無關,與異常處理有關)
如果捕捉成功則進入另外一個處理分支,執行你為其定製的邏輯,使程式不會崩潰,這就是異常處理。
語法
異常處理的語法:
- if判斷
# num=input("請輸入數字:")
# if num.isdigit():
# get_sum=1+int(num)
# print(get_sum)
# else:
# print("輸入有誤")
- python特定的異常處理語法
1)基礎的 try except
num=input("請輸入數字:")
try:
get_sum=1+int(num)
print(get_sum)
except ValueError:
print("輸入有誤") #只有觸發ValueError異常時,才會走到這裡
2)多分支異常
s1 = 'hello'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
3)萬能異常Exception
可以匹配絕大多數情況的異常,最好打印出異常的錯誤說明。
s1 = 'hello'
try:
int(s1)
except Exception as e:
print(e)
4)多分支+萬能異常
將能預料到的異常型別放到分支裡面處理,剩下的情況再用萬能異常匹配處理。
dic={"11":"aa","22":"2"}
try:
print(dic["key"])
except NameError:
print("NameError錯誤")
except KeyError:
print("KeyError錯誤")
except ValueError:
print("ValueError錯誤")
except Exception as e:
print(e)
5)else的使用
try中的程式碼正常執行,沒有異常的時候會執行else中的程式碼。try except else固定連用
dic={"11":"aa","22":"2"}
try:
print(dic["11"])
except KeyError:
print("KeyError錯誤")
except ValueError:
print("ValueError錯誤")
else:
print("good")
6)finally的使用
無論是否有異常,或突然退出,都會執行finally中的內容,可用於資源回收
def get_file():
try:
f = open("test.log")
# exit()
return f.read() #return或者exit()都會執行finally
except Exception as e:
pass
finally:
print("執行finally")
f.close()
get_file()
7)主動拋異常 raise
raise ValueError #主動丟擲ValueError的異常
s1 = 'hello'
try:
int(s1)
except Exception:
print("value型別錯誤")
raise #丟擲匹配到此分支的錯誤型別
8)自定義異常
一般程式碼面向的物件是程式設計師,而不是使用者時,才有可能自定義異常。
class MydefError(Exception):
def __init__(self,msg):
self.msg=msg
def __str__(self):
return self.msg
# raise MydefError("我說它錯了,它就錯了")
try:
raise MydefError("我說它錯了,它就錯了")
except MydefError as e:
print(e)
9)斷言 assert
用法:assert
只有滿足assert True時,下面的程式才會執行。通常用於整個大程式的邏輯判斷,符合則繼續執行,不符合,則不執行後續全部程式碼。
print("start")
assert True
# assert False
print("aaa")
總結:python中異常處理常用語法:
try except
try except else
try except else finally
try/except/finally
try/finally