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)
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語句實現。
assert語句又稱作斷言,指的是期望用戶滿足指定的條件。當用戶定義的約束條件不滿足的時候,它會觸發AssertionError,所以assert語句可以當做條件式的raise語句。
assert 邏輯表達式,data #data是可選的
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語句
對象的操作
data = file.read()
例:讀取文本
with open('123.txt') as f:
data = f.readlines()
for each_line in data:
print(each_line)