零基础学习python_异常处理(32-33课)
我們寫完python執行的時候是不是經常會遇到報錯,而且報錯都是大片紅字,這樣給別人的感受就是你寫的程序怎么老是出問題啊,這樣我們還咋么混下去呢?于是乎,就有了異常處理的東東。
python的try語句有兩種風格---一種是處理異常(try/except/else),一種是無論是否發生異常都將執行最后的代碼(try/finally)。
第一種處理異常如下:try: <語句> ? ? ? ?#運行代碼 except?<異常的名字>: <語句> ? ? ?? #哪個異常符合執行哪個 except?<異常的名字> as <報錯的信息>: <語句> ? ? ? ?#報錯信息可以以變量形式打印 else: <語句> ? ? ? #沒有異常時執行 第二種處理異常如下:
try:
<語句> except?<異常的名字>: <語句> ? ? ?? finally: <語句> ? #退出時總是執行 ? 舉兩個實例看下: 第一個實例: try:open("test.txt",'r') #打開一個不存在的文件
except IOError: #捕捉這個異常pass #表示實現了相應的實現,但什么也不做。
第二個例子: ?
try語句子句形式表如下 except:??????????? 捕獲所有異常 except?name:??????? 只捕獲特定的異常 except?name as value:??? 捕獲異常和它的附加數據 except?(name1,name2):??? 捕獲任何列出的異常 else:??????????? 如果沒有異常 finally:??????? 總是執行 常見異常:
Exception ?? ? ? ? ? ? ? ? ? ? ? 所有異常的基類
AttributeError? ? ? ? ? ? ? ? ?特性應用或賦值失敗時引發
IOError? ? ? ? ? ? ? ? ? ? ? ? ? ? ?試圖打開不存在的文件時引發
IndexError? ? ? ? ? ? ? ? ? ? ? ?在使用序列中不存在的索引時引發
KeyError ?? ? ? ? ? ? ? ? ? ? ? ? 在使用映射不存在的鍵時引發
NameError ?? ? ? ? ? ? ? ? ? ? ?在找不到名字(變量)時引發
SyntaxError? ? ? ? ? ? ? ? ? ? ?在代碼為錯誤形式時引發
TypeError?? ? ? ? ? ? ? ? ? ? ? ? 在內建操作或者函數應用于錯誤類型的對象是引發
ValueError? ? ? ? ? ? ? ? ? ? ? ?在內建操作或者函數應用于正確類型的對象,但是該對象使用不合適的值時引發
ZeroDivisionError?? ? ? ? ?在除法或者摸除操作的第二個參數為0時引發
?
還有一個就是主動觸發異常(raise)。
raise語法格式如下:
raise [Exception [, args [, traceback]]]
語句中Exception是異常的類型(例如,NameError)參數是一個異常參數值。該參數是可選的,如果不提供,異常的參數是"None"。
最后一個參數是可選的(在實踐中很少使用),如果存在,是跟蹤異常對象。
格式如下:
try:raise TypeError('類型錯誤')
except Exception as e:print(e)
舉個例子: try:for i in range(3):for i in range(3):if i == 2:raise KeyboardInterruptprint(i,j) except KeyboardInterrupt:print('退出!')
?
學了以上的知識點后,我們可以來看下底下這個例子:
try:f = open('test1.txt','r') #提示:打開不存在文件就出錯了,此時還未打開文件,因此根本就沒有f這個變量f.read() except IOError as e:print('錯誤:',e) except SyntaxError:pass except NameError as msg:print('錯誤:'+str(msg)) except:print('對的,都是你的錯') else:print('讀取成功') finally:f.close() #無論咋樣都要關閉文件
看完之后你們覺得這個會有什么問題呢?
最后在文件關閉的時候會報錯如下:
那我們怎么規避呢?思考下吧~~~~
?
答案如下:
try:f = open('test1.txt','r') f.read() except IOError as e:print('錯誤:',e) except SyntaxError:pass except NameError as msg:print('錯誤:'+str(msg)) except:print('對的,都是你的錯') else:print('讀取成功') finally:if 'f' in locals(): #如果文件對象變量存在當前局部變量符號表的話就說明打開成功了f.close()
簡單吧,嘻嘻^-^
?
轉載于:https://www.cnblogs.com/leixiaobai/p/7777583.html
總結
以上是生活随笔為你收集整理的零基础学习python_异常处理(32-33课)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洗牙是去医院还是去牙科诊所?
- 下一篇: 求一个积极乐观的个性签名