12異常

一、異常處理
1.最簡單的try-except語句格式如下:
try:
 #語句塊
except:
 #異常處理代碼


>>> try:
 print('-----------------')
 a = int(input('請輸入一個數:'))
 b = int(input('請在輸入一個數:'))
 print(a/b)
except ZeroDivisionError:
 print('第二個數不能爲0')
 
-----------------
請輸入一個數:232
請在輸入一個數:0
第二個數不能爲0

2.捕獲多個異常;捕獲異常的描述信息(應用as)
 try:
  #語句塊
 except 異常名稱1:
  #異常處理代碼
 except 異常名稱2:
  #異常處理代碼

     異常名稱可用元組表示
>>> try:
 a = int(input('請輸入一個數:'))
 b = int(input('請在輸入一個數:'))
 print(a/b)
except (ZeroDivisionError,ValueError) as result:
 print('捕捉到異常%s'%result)
 
請輸入一個數:b
捕捉到異常invalid literal for int() with base 10: 'b'

3.捕獲所有的異常(Exception)
>>> try:
 a = int(input('請輸入一個數:'))
 b = int(input('請在輸入一個數:'))
 print(a/b)
except Exception as result:
 print('輸入錯誤,錯誤類型:',result)
 
請輸入一個數:23
請在輸入一個數:0
輸入錯誤,錯誤類型: division by zero

4.沒有捕獲到異常
try:
except:
else:

5.中止行爲
在程序中,有一種情況是,無論是否捕捉到異常,都要執行一些中止行爲,比如關閉文件,這時可用finally語句處理。

try:
 f.open('sssdada','r')
 xxxxx
finally:
 f.close()
 print('關閉文件')

二、拋出異常
1.raise語句
①使用類名引發異常
raise IndexError
②使用異常類的實例引發異常
index = IndexError()
raise index
③傳遞異常
不帶任何參數的raise語句,可以再次引發剛剛發生過的異常,作用就是向外傳遞異常。

>>> try:
 raise IndexError
except:
 print('出錯了')
 raise
出錯了
Traceback (most recent call last):
  File "<pyshell#8>", line 2, in <module>
    raise IndexError
IndexError
>>>

④指定異常的描述信息

>>> raise IndexError('索引錯誤')
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    raise IndexError('索引錯誤')
IndexError: 索引錯誤
>>>
⑤異常引發異常
如果要在異常中拋出另外一個異常,可以使用raise-from語句實現。
 
2.斷言assert語句
assert語句又稱作斷言,指的是期望用戶滿足指定的條件。當用戶定義的約束條件不滿足的時候,它會觸發AssertionError,所以assert語句可以當做條件式的raise語句。
格式:
assert  邏輯表達式,data     #data是可選的
在上述格式中,assert後緊跟一個邏輯表達式,相當於條件。data通常是一個字符串,當表達式的結果爲False時,作爲異常類型的描述信息使用。邏輯上等同於:
if not 邏輯表達式:
 raise AssertError(data)


>>> a = 0
>>> assert a!=0,'a的值不能爲零'
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    assert a!=0,'a的值不能爲零'
AssertionError: a的值不能爲零
>>>

assert語句用來收集用戶定義的約束條件,而不是捕捉內在的程序設計錯誤。

三、自定義異常
WAITING FOR UPDATING···
四、預定義清理
上下文管理;with語句
語法格式:
with 上下文表達式 [as 資源對象]:
 對象的操作
with open('foo.txt') as file:
 data = file.read()
上述實例使用with語句打開文件。如果能順利打開文件,則將文件對象賦值給file,然後調用read方法讀取了file對象的數據。當對文件操

例:讀取文本
with open('123.txt') as f:
    data = f.readlines()
    for each_line in data:
        print(each_line)


發佈了41 篇原創文章 · 獲贊 1 · 訪問量 3374
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章