異常
#print(help(NameError))#NameError是一個類
#在python中所有異常都是繼承BaseException
#共分四大類
# SystemExit:Python退出異常
# KeyboardInterrupt:鍵盤打斷(Ctrl+C)
# GeneratorExit:生成器退出(下次課再講)
# Exception:普通異常(只會使用這部分的異常)
## 異常的傳遞性
def a():
? ? print(ccc)
def b():
? ? a()
def c():
? ? b()
c()#錯誤行最后顯示饥瓷,層層尋找
#報錯后术辐,后面代碼都不執(zhí)行
#需要掌握如何查找和解決報錯的能力蜈敢,并掌握如何向他人描述bug
class A:
? ? def __init__(self,name):
? ? ? ? print(name)
#TypeError類型錯誤宏粤,不會查詢到錯誤行顷霹,
try:
? a=A()#可能報錯的代碼
except Exception as n:#捕獲到異常后執(zhí)行后面代碼
? ? print(n)
else:#沒有捕獲到異常代碼則執(zhí)行
? ? raise n(...)#拋出異常,既run界面顯示,所有異常都可,...希望返回的錯誤信息
? ? print('this is else')
finally:#始終執(zhí)行
print('this is finally')
finally和不寫在捕獲塊當(dāng)中的區(qū)別是:拋出了異常也會執(zhí)行finally塊中的代碼
#捕獲異常
try except 成對出現(xiàn)
try:
? ? print(aaa)
except NameError as n:#是NameError就返回為什么報錯->name 'aaa' is not defined
? ? print(n)? ? ? ? ? #有該類異常,則執(zhí)行或有異常執(zhí)行
print('hello')
except TypeError as o:
? ? print(o)
#或者 except(NameError,TypeError) :
#或者 except Exception:#不確定異常類型時
#代碼中會出現(xiàn)的異常都是Exception的子類积担,
#因此在except中只需要在最后加上Exception即可
#在捕獲異常的過程中霉颠,會從上倒下依次對比異常,找到之后就不會再往后查找
class MyError(Exception):#有時也自己寫異常來達(dá)到編寫目的
? ? pass
raise MyError
n=input('請輸入:')
class W(Exception):
? ? def __init__(self,n,m):
? ? ? ? self.n=n
? ? ? ? self.n=m
? ? def name1(self):
? ? ? ? print('這個人是:%s'%self.n)
if n=='w':
? ? print('www')
else:
? ? try:
? ? ? ? raise W('你不是w 你是%s ,你沒他帥'%n,n)
? ? except W as e:
? ? ? ? print(e)#
? ? ? ? W('你不是w 你是%s ,你沒他帥'%n,n).name1()
#assert bool后接個bool值事期,如果是True程序繼續(xù)滥壕,否則報錯:AssertionError
print(11)
assert 1==2
print(222)
try:
? ? assert 1==2,'nihao'
except AssertionError as e:
? ? print(e)#錯誤信息為'nihao'
#在自己的py文件中__name__='__main__'#約定俗成
#主函數(shù)的入口 主程序的入口 程序的窗口
#在if __name__='__main__'下面寫這個py文件的調(diào)用,使用
#如果其他文件導(dǎo)入了該py文件兽泣,那么在if __name__=='__main__'下面的代碼
#不會再執(zhí)行
if __name__== '__main__':
? ? print('ok')
? ? import 異常
print('nihao')