錯誤分類:python
1.語法錯誤: 你程序未執行以前,pycharm已經給你作了提示了.git
name數據庫
if 1> 0 ;微信
pass網絡
age = 3微信支付
2. 邏輯錯誤utf-8
num = int(input('>>>'))pycharm
什麼是異常?input
由錯誤引起的,並且 出現異常就會終止程序源碼
爲何要進行異常處理?
1.異常就會終止程序,用戶體驗極差
2.讓你的代碼不冗餘
異常處理:
1. if ,異常處理,他只能處理簡單的邏輯
num = input('>>>')
if num.isdigit():
num = int(num)
if 1<= num <=5:
if
else:
print('有非數字類型')
2.try 異常處理
遇到報錯信息,防止程序終止,執行另外一個語句.
2.1單獨一個條件,單支.
try:
num = int(input('>>>')) #ValueError
name #NameError
# if 1 > 0; # SyntaxError
dic = {}
dic['key'] #KeyEroor
except NameError:
print('出現了NameError錯誤')
2.2多分支
try:
num = int(input('>>>')) #ValueError
# name # NameError
# dic = {}
# dic['key'] # KeyError
# li = [1,2,3]
# li[10] # IndexError
# import ac # ImportError
except NameError:
print('出現了NameError錯誤')
except ValueError:
print('出現了ValueError錯誤')
except KeyError:
print('出現了KeyError錯誤')
print(222)
print(333)
print(114441)
class A:
def __str__(self):
return 'list index out of range'
a1 = A()
print(a1)
# 3 萬能異常處理.
# try:
# # num = int(input('>>>')) #ValueError
# # name # NameError
# dic = {}
# # dic['key'] # KeyError
# li = [1,2,3]
# li[10] # IndexError
# import ac # ImportError
# except Exception as e:
# # print('您輸入的不規範,請從新輸入...')
# print('稍等片刻,去去就來...')
# 異常處理的兩種結局方式:
# 1,只是顯示錯誤信息,不終止程序就行. 萬能的
# 2,針對不一樣的錯誤,提示不一樣的信息,進行不一樣的操做. 多分支
# def login():
# pass
#
# def regsiter():
# pass
#
# def article():
# pass
#
# def dariy():
# pass
# dic = {
# 1:login,
# 2:regsiter,
# 3:article,
# 4:dariy,
# }
# while True:
# choice = input('請輸入:')
# if choice.isdigit():
# choice = int(choice)
# if 1 <= choice <=4:
# dic[choice]()
#
# else:
# print('請範圍內的數字...')
# else:
# print('請輸入數字...')
# while True:
# try:
# choice = int(input('請輸入:'))
# dic[choice]()
# except ValueError:
# print('請輸入數字...')
# except KeyError:
# print('請範圍內的數字...')
# 4 多分支+萬能.
# while True:
# try:
# choice = int(input('請輸入:'))
# dic[choice]()
# except ValueError:
# print('請輸入數字...')
# except Exception as e:
# print(e)
# except KeyError:
# print('請範圍內的數字...')
# try:
# choice = int(input('請輸入:'))
# except ValueError:
# print('請輸入數字...')
# except KeyError:
# print('請範圍內的數字...')
# except Exception as e:
# print(e)
# 2.5 try except except ... else# 若是程序出現異常執行except,就不會執行else,反之則執行else# try:# print('個人卡扣除100元')# print('旭哥的卡增長了100元')# except NameError:# print('轉帳出現異常...')# else:# print('轉帳成功')#2.6# try except except ... else .finally# try finally# try:# print('個人卡扣除100元')# name# print('旭哥的卡增長了100元')# except NameError:# print('轉帳出現異常...')# else:# print('轉帳成功')# finally:# print('6666666')# 666不執行# name# print(666)# try:# name# finally:# print(666)# try:# f = open('t1',encoding='utf-8')# print(f.read())# '''多個文件句柄的操做'''# f.write()# finally:## f.close()# print(666)# 最後close()# f.close()# def func():# try:# return 555# finally:# '''代碼塊'''# print(777)# func()# try finally 關閉文件句柄,關閉數據庫的連接,關閉網絡連接等等# 2.7 主動觸發異常# raise TypeError('類型錯誤')# class Payment:# def pay(self,money):# raise TypeError('你的類中應該用一個pay方法')## class QQ(Payment):# def pay(self,money):# print('您用qq支付了%s元' % money)### class Wechat(Payment):# def pay(self,money):# print('您用微信支付了%s元' % money)## def pay(obj,money):# obj.pay(money) # a1.pay(200)## q1 = QQ()# w1 = Wechat()# pay(w1,1000)#2.8 自定義異常 (大項目,針對於python不具有的一些錯誤類型.)# raise TypeError('類型錯誤')# name1 : python解釋器無法解決的錯誤: 周星星# class 周星星(BaseException):# def __init__(self,msg):# self.msg=msg# def __str__(self):# return self.msg## # # raise EvaException('EvaException:錯誤!!!!' )# # # raise TypeError('EvaException:錯誤!!!!' )# try:# raise 周星星('EvaException:錯誤!!!!' )# except 周星星 as e: # e = EvaException('類型錯誤')# print(e)# 斷言 源碼 主動拋出異常# condition = 1 > 2# assert condition # 若是條件不知足強行終止.# print(111)# print(222)# print(113331)# print(5455)# if 1 == 2:# print(111)# print(222)# print(113331)# print(5455)'''1,try ...except 單個狀況2,try except except..... 多分支,針對多個你已知的異常,分別導向不一樣的代碼. *3,try except Exception as e: 萬能異常處理. 你對出現的異常錯誤未知,你要用萬能的. * # 1,只是顯示錯誤信息,不終止程序就行. 萬能的 # 2,針對不一樣的錯誤,提示不一樣的信息,進行不一樣的操做. 多分支,多分支+ 萬能4,try except except except Exception as e: 多分支 + 萬能 *5,try except except... else 出現異常就不執行else代碼反之則執行.6, try except except... else,finally 不經常使用 try finally * 涉及到關閉文件句柄,網絡連接,數據庫連接等等.7, raise8, 自定義異常處理.9 assert'''