異常捕獲
1.異常捕獲
當程序發(fā)生異常的時候,默認情況會程序崩潰,不能接著往后執(zhí)行;捕獲異常就是讓程序發(fā)生異常的時候不崩潰,能夠接著往后執(zhí)行。
一般在明明知道代碼可能會出現(xiàn)異常,但是又不能通過修改代碼去避免, 這個時候就可以通過異常捕獲去處理異常
# age = int(input('請輸入年齡(數(shù)字):'))
# print(age)
2.捕獲異常的語法
1)語法一: 捕獲所有異常
try:
代碼段1
except:
代碼段2
finally:
代碼段f
說明: try, except - 關(guān)鍵字,固定寫法
代碼段1 - 需要捕獲異常的一條或者多條語句
代碼段2 - 出現(xiàn)異常后會執(zhí)行的一條或者多條語句
執(zhí)行過程: 先執(zhí)行代碼段1,如果執(zhí)行代碼段1的時候出現(xiàn)異常,程序不崩潰,直接執(zhí)行代碼段2;
如果代碼段1沒有出現(xiàn)異常,不會執(zhí)行代碼段2
2)語法二:
try:
代碼段1
except 異常類型:
代碼段2
finally:
代碼段f
執(zhí)行過程: 先執(zhí)行代碼段1,如果執(zhí)行代碼段1的時候出現(xiàn)異常,判斷異常類型和except后面的異常類型是否一致,
如果是一致的程序不崩潰,直接執(zhí)行代碼段2;如果不一致,程序直接崩潰
如果代碼段1沒有出現(xiàn)異常,不會執(zhí)行代碼段2
3)語法三:
try:
代碼段1
except (異常類型1, 異常類型2,...):
代碼段2
finally:
代碼段f
執(zhí)行過程: 先執(zhí)行代碼段1,如果執(zhí)行代碼段1的時候出現(xiàn)異常,判斷異常類型和except后面的異常類型是否一致,
如果是一致的程序不崩潰,直接執(zhí)行代碼段2;如果不一致,程序直接崩潰
如果代碼段1沒有出現(xiàn)異常,不會執(zhí)行代碼段2
4)語法四:
try:
代碼段1
except 異常類型1:
代碼段11
except 異常類型2:
代碼段22
except 異常類型3:
代碼段33
...
finally:
代碼段f
3.finally
捕獲異常的最后都可以添加一個finally,finally后面的代碼段f任何時候都會執(zhí)行
- try后面的代碼段沒有出現(xiàn)異常,finally會執(zhí)行
- try后面的代碼段出現(xiàn)異常被捕獲到,finally會執(zhí)行
- try后面的代碼段出現(xiàn)異常沒有被捕獲到,finally會執(zhí)行
4.拋出異常
讓代碼在某種情況下主動奔潰:
raise 異常類型
# 異常捕獲1
try:
print({'a': 10, 'b': 20}['c'])
nums = [1, 2, 3]
print(nums[4])
print('==========')
except:
print('出現(xiàn)了異常!')
# 異常捕獲2
print('==========================')
nums = [1, 2, 3]
person = {'name': '小明', 'age': 18, 'gender': '男'}
try:
print(person['score'])
print('===')
print(nums[4])
print('+++')
except KeyError:
print('出現(xiàn)鍵錯誤的異常!')
# finally
try:
print(nums[1])
except KeyError:
print('出現(xiàn)異常')
finally:
print('最后寫書')
# raise
# raise KeyError
class AgeError(Exception):
def __str__(self):
return '年齡的值應該在0~150'
age = int(input('輸入年齡(0~150):'))
if not 0 < age < 150:
raise AgeError
```python