# 1.異常只能用來處理指定的異常取代,如果非指定異常則無法處理
# 2多分支:被監測的代碼塊拋出的異常有多種可能性,並且我們需要針對每一種異常類型都定制專門的處理邏輯
try:
print('========>1')
# name
print('==========>2')
l = [1, 2, 3]
# l[100]
print('==========>3')
d={ }
d['name']
print('=============>4')
except NameError as e:
print('----------->', e)
print(1)
except IndexError as e:
print('----------->', e)
print(2)
except KeyError as e:
print('----------->', e)
print(3)
print('執行接下去的代碼')
'''如果遇到 NameError 執行結果:
========>1
-----------> name 'name' is not defined
####執行完跳到 print('執行接下去的代碼')
'''
'''如果遇到 IndexError 執行結果:
========>1
==========>2
-----------> list index out of range
####執行完跳到 print('執行接下去的代碼')
'''
'''如果遇到 KeyError 執行結果:
========>1
==========>2
==========>3
-----------> 'name'
####執行完跳到 print('執行接下去的代碼')
'''
# 萬能異常:Exception ,被監測的代碼塊拋出的異常有多種可能性,
# 並且我們針對所有的異常類型都只用一種處理邏輯就可以了,那就使用Exception
try:
print('========>1')
name
print('==========>2')
l = [1, 2, 3]
l[100]
print('==========>3')
d={ }
d['name']
print('=============>4')
except Exception as e :
print('------------>', e)
print('執行接下去的代碼')
# 其他結構:
try:
print('========>1')
name
print('==========>2')
l = [1, 2, 3]
# l[100]
print('==========>3')
d={ }
d['name']
print('=============>4')
except NameError as e:
print('----------->', e)
print(1)
except IndexError as e:
print('----------->', e)
print(2)
except KeyError as e:
print('----------->', e)
print(3)
except Exception as e:
print('統一的處理方法',333)
else:
print('在被監測的代碼塊沒有發生異常時執行')
finally:
print('不管被監測的代碼塊有無發生異常都會執行')
print('執行接下去的代碼')
# 主動觸發異常:raise 異常類型(值)
class People:
def __init__(self,name,age):
if not isinstance(name,str):
raise TypeError('name傳入必需是字符串類型')
if not isinstance(age,int):
raise TypeError('age 傳入必需是int類型')
self.name=name
self.age=age
p = People('kingfor',18)
# 自定義異常類型:
class MyException(BaseException):
def __init__(self,msg):
super(MyException,self).__init__()
self.msg = msg
def __str__(self):
return '<%s>' % self.msg
raise MyException('我自定義異常處理類型')
# 斷言assert
info = {}
info['name'] = 'kingforn'
info['age'] = 18
# if 'name' not in info:
# raise KeyError('必須有name這個key')
# if 'age' not in info:
# raise KeyError('必須有name這個key')
assert ('name' in info) and ('age' in info)
if info['name'] == 'kingforn' and info['age'] >10:
print('welcome')