異常處理

一.錯誤和異常
1.錯誤
1.1 語法錯誤(沒法經過python解釋器的語法檢測,應該在程序執行前就改正)
1 print(haha
1.2 邏輯錯誤
1 num=input('請輸入一個數:')  #若是此時輸入的不是一個數字 會報錯
2 int(num)
2.異常
異常就是程序運行時發生錯誤的信號

3. python中的異常種類
錯誤 錯誤緣由 舉例
SyntaxError
語法錯誤(寫的時候就應該規避掉)
print(a
IndexError
索引錯誤
lis=[]
print(lis[0])
  KeyError 獲取字典中不存在的key
dic={}
print(dic['key'])
EOFError 光標已經在文件尾部了,不能進行你所期待的操做了
 1 import pickle  2 dic1={(1,2,3):{'a','b'},1:'abc'}  3 dic2={(1,2,3):{'a','b'},2:'abc'}  4 dic3={(1,2,3):{'a','b'},3:'abc'}  5 with open('pickle_file','wb') as f:  6  pickle.dump(dic1,f)  7  pickle.dump(dic2,f)  8  pickle.dump(dic3,f)  9 with open('pickle_file','rb') as f: 10     ret=pickle.load(f) 11     print(ret) 12     ret = pickle.load(f) 13     print(ret) 14     ret = pickle.load(f) 15     print(ret) 16     ret = pickle.load(f) 17     print(ret)
View Code
FileNotFoundError 文件不存在
with open('aaa','r',encoding='utf-8') as f:
pass
ModuleNotFoundError 模塊不存在
import aaaaaaaa
ValueError 用了一個錯誤的值
int('中國')
NameError 用了一個沒有定義的名字
print(a)
未完待續...    


 當我要處理的內容不肯定的時候,最容易出異常:python

  (1).有用戶參與的網絡

  (2).從文件中讀,從網絡中獲取ide

 4.經常使用異常:spa

 1 AttributeError 試圖訪問一個對象沒有的樹形,好比foo.x,可是foo沒有屬性x  2 IOError 輸入/輸出異常;基本上是沒法打開文件  3 ImportError 沒法引入模塊或包;基本上是路徑問題或名稱錯誤  4 IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊  5 IndexError 下標索引超出序列邊界,好比當x只有三個元素,卻試圖訪問x[5]  6 KeyError 試圖訪問字典裏不存在的鍵  7 KeyboardInterrupt Ctrl+C被按下  8 NameError 使用一個還未被賦予對象的變量  9 SyntaxError Python代碼非法,代碼不能編譯(我的認爲這是語法錯誤,寫錯了) 10 TypeError 傳入對象類型與要求的不符合 11 UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是因爲另有一個同名的全局變量, 12 致使你覺得正在訪問它 13 ValueError 傳入一個調用者不指望的值,即便值的類型是正確的
View Code

 5.更多的異常:3d

 1 ArithmeticError  2 AssertionError  3 AttributeError  4 BaseException  5 BufferError  6 BytesWarning  7 DeprecationWarning  8 EnvironmentError  9 EOFError 10 Exception 11 FloatingPointError 12 FutureWarning 13 GeneratorExit 14 ImportError 15 ImportWarning 16 IndentationError 17 IndexError 18 IOError 19 KeyboardInterrupt 20 KeyError 21 LookupError 22 MemoryError 23 NameError 24 NotImplementedError 25 OSError 26 OverflowError 27 PendingDeprecationWarning 28 ReferenceError 29 RuntimeError 30 RuntimeWarning 31 StandardError 32 StopIteration 33 SyntaxError 34 SyntaxWarning 35 SystemError 36 SystemExit 37 TabError 38 TypeError 39 UnboundLocalError 40 UnicodeDecodeError 41 UnicodeEncodeError 42 UnicodeError 43 UnicodeTranslateError 44 UnicodeWarning 45 UserWarning 46 ValueError 47 Warning 48 ZeroDivisionError
View Code

 6.當有多行報錯時是爲何code

 在嵌套調用的過程當中,內部的代碼出現了問題,外部全部調用的地方所有報錯對象

1 def func(): 2     print(a) 3 def func1(): 4  func() 5 def func2(): 6  func1() 7 func2()

二.異常處理blog

1.什麼是異常:異常發生以後,代碼就不繼續執行了索引

2.什麼是異常處理:python解釋器檢測到錯誤,觸發異常,咱們來編寫這個代碼用來捕捉異常,若是捕捉成功,就會進入到另外一個處理分支,執行咱們編寫的特定的邏輯,使程序不至於崩潰.utf-8

1 l=['login','register'] 2 for num,work in enumerate(l): 3     print(num+1,work) 4 try: 5     num=int(input('請輸入序號:')) 6 except ValueError:  #except處理的異常必須是和實際錯誤相同的
7     print('請輸入一個數字') 8 print(l[num-1])
單分支
 1 l=['login','register']  2 for num,work in enumerate(l):  3     print(num+1,work)  4 
 5 try:  6     num=int(input('請輸入序號:'))  7     print(l[num - 1])  8 except ValueError:  9     print('請輸入一個數字') 10 except IndexError: 11     print('請輸入1或2')
多分支
1 l=['login','register'] 2 for num,work in enumerate(l): 3     print(num+1,work) 4 
5 try: 6     num=int(input('請輸入序號:')) 7     print(l[num - 1]) 8 except (ValueError,IndexError): 9     print('您輸入的內容不合法')
多分支合併
 1 def buy():  2     print('buy')  3  name  4 def back():  5     print('back')  6     l=[]  7     print(l[1])  8 def look():  9     print('look') 10     11/0 11 def main(): 12     l=['購物','退貨','查看訂單'] 13     while True: 14         for num, work in enumerate(l): 15             print(num+1,work) 16         num = int(input('請輸入序號:')) 17         try: 18             print(l[num - 1]) 19  buy() 20  look() 21  look() 22         except Exception: 23             print('發生了未知的錯') 24 main()
萬能異常
 1 def buy():  2 # print('buy')
 3 # name
 4 # def back():
 5 # print('back')
 6 # l=[]
 7 # print(l[1])
 8 # def look():
 9 # print('look')
10 # 11/0
11 # def main():
12 # l=[('購物',buy),('退貨',back),('查看訂單',look)]
13 # while True:
14 # for num, work in enumerate(l):
15 # print(num+1,work)
16 # # num = int(input('請輸入序號:'))
17 # try:
18 # num = int(input('請輸入序號:'))
19 # func=l[num - 1][1]
20 # func()
21 # except Exception as e:
22 # print(e)#這裏還能夠print(e.args,e.__traceback__.tb_lineno,e.__traceback__.tb_frame)
23 # print('發生了未知的錯')
24 # main()
as語法 可以將具體錯誤信息打印出來
1 try: 2 # name
3 # [][1]
4 # int('aaa')
5 # except:
6 # print('出錯了')
萬能異常:至關於except exception
 1 l=['login','register']  2 for num,work in enumerate(l):  3     print(num+1,work)  4 try:  5     num=int(input('請輸入序號:'))  6     print(l[num - 1])  7 except (ValueError,IndexError):  8     print('您輸入的內容不合法')  9 except Exception as e: 10     print(e) 11     print('應急的通用性的處理')
多分支 + 萬能異常 : 萬能異常應該永遠放在異常處理的最下
相關文章
相關標籤/搜索