1. try 與 except
范例1:
單分支
try:
ret = int(input("number >>>"))
print(ret*"*")
except ValueError:
print("您輸入的內(nèi)容有誤,請(qǐng)輸入一個(gè)數(shù)字")
執(zhí)行結(jié)果:
number >>>a
您輸入的內(nèi)容有誤,請(qǐng)輸入一個(gè)數(shù)字
范例2:多分支
try:
[][3]
ret = int(input("number >>>"))
print(ret*"*")
except ValueError:
print("您輸入的內(nèi)容有誤,請(qǐng)輸入一個(gè)數(shù)字")
except IndexError:
print("超出列表的最大長(zhǎng)度了")
執(zhí)行結(jié)果:
超出列表的最大長(zhǎng)度了
范例3:萬(wàn)能異常
try:
print("1111")
1/0
name
[][3]
{}["k"]
ret = int(input("number >>>"))
print(ret*"*")
except Exception:
print("你錯(cuò)了,老鐵")
執(zhí)行結(jié)果:
1111
你錯(cuò)了,老鐵
范例4:else
try:
print("1111")
#1/0
print("2222")
#name
#[][3]
#{}["k"]
ret = int(input("number >>>"))
print(ret*"*")
except ValueError:
print('輸入的數(shù)據(jù)類型有誤')
except Exception:
print("你錯(cuò)了,老鐵")
else:
print("沒(méi)有異常的時(shí)候執(zhí)行else中的代碼")
執(zhí)行結(jié)果:
1111
2222
number >>>11
***********
沒(méi)有異常的時(shí)候執(zhí)行else中的代碼
范例5:finally
try:
print("1111")
#1/0
print("2222")
#name
#[][3]
#{}["k"]
ret = int(input("number >>>"))
print(ret*"*")
except ValueError:
print('輸入的數(shù)據(jù)類型有誤')
except Exception:
print("你錯(cuò)了,老鐵")
else:
print("沒(méi)有異常的時(shí)候執(zhí)行else中的代碼")
finally:
print("======")
執(zhí)行結(jié)果:
1111
2222
number >>>3
***
沒(méi)有異常的時(shí)候執(zhí)行else中的代碼
======
范例6:finally的文件應(yīng)用
def func():
try:
f = open('file','w')
''''''
return True
except:
return False
finally:
print('執(zhí)行finally了')
f.close()
print(func())
執(zhí)行結(jié)果:
執(zhí)行finally了
True
范例7:
try:
print("1111")
#1/0
print("2222")
#name
#[][3]
#{}["k"]
ret = int(input("number >>>"))
print(ret*"*")
except Exception as error:
print("你錯(cuò)了,老鐵",error)
執(zhí)行結(jié)果:
1111
2222
number >>>aaa
你錯(cuò)了,老鐵 invalid literal for int() with base 10: 'aaa'
2. 小結(jié)
# 程序一旦發(fā)生錯(cuò)誤,就從錯(cuò)誤的位置停下來(lái)了,不在繼續(xù)執(zhí)行后面的內(nèi)容
# 使用try和except就能處理異常
#try是我們需要處理的代碼
#except 后面跟一個(gè)錯(cuò)誤類型 當(dāng)代碼發(fā)生錯(cuò)誤且錯(cuò)誤類型符合的時(shí)候 就會(huì)執(zhí)行except中的代碼
#except支持多分支
#有沒(méi)有一個(gè)能處理所有錯(cuò)誤的類型 : Exception
# 有了萬(wàn)能的處理機(jī)制仍然需要把能預(yù)測(cè)到的問(wèn)題單獨(dú)處理
# 單獨(dú)處理的所有內(nèi)容都應(yīng)該寫(xiě)在萬(wàn)能異常之前
# else : 沒(méi)有異常的時(shí)候執(zhí)行else中的代碼
# finally : 不管代碼是否異常,都會(huì)執(zhí)行
# finally和return相遇的時(shí)候 依然會(huì)執(zhí)行
# 函數(shù)里做異常處理用,不管是否異常去做一些收尾工作