try....except....詳細用法


# 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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM