錯誤:沒法通過其他**進行處理的問題 語法錯誤、邏輯錯誤
異常:多指程式在執行過程中,出現未知錯誤,語法和邏輯都是正確的,可以通過其他**進行處理修復
常見的系統異常
# 1、除零異常
# 1 / 0
# 2、名稱異常
# print(name)
# 3、型別異常
# "1" + 2
# 4、索引異常
l =[1,
2]# l[3]
# 鍵異常
dic =
# dic["add"]
# 值異常
# int("abc")
# 屬性異常
# name = "yl"
# print(name.xx)
# 迭代器異常
it =
iter([
1,2]
)print
(next
(it)
)print
(next
(it)
)# print(next(it))
# 自己定義的異常
# 繼承自exception
異常的解決
系統一開始已經內建了一些特定的應用場景,當我們寫**的過程當中,一旦觸發了這個場景,系統內部就會自動向外界丟擲這個場景,也就是所謂的異常不去處理這個異常,就是程式被終止執行,導致軟體的崩潰
# try:
# print(name) # 可能出現異常的**
# except nameerror: # 你要捕捉異常的類別
# print("名稱有問題,請仔細檢查") # 對異常處理
# else:
# # 沒有出現異常的處理
# finally:
# # 不管有沒有出現異常都會執行的**
try:1/
0print
(name)
# 從上往下檢測,先檢測先處理
except zerodivisionerror as ze:
print
("除零錯誤:"
, ze)
except nameerror as ne:
print
("名稱錯誤:"
, ne)
finally
:print
("不管有沒有出現異常都會執行的**"
)# 合併處理多個異常
try:1/
0print
(name)
# 從上往下檢測,先檢測先處理
except
(zerodivisionerror, nameerror)
:print
("異常"
)finally
:print
("不管有沒有出現異常都會執行的**"
)try:1
/0print
(name)
# 從上往下檢測,先檢測先處理
except exception as e:
print
("異常"
, e)
finally
:print
("不管有沒有出現異常都會執行的**"
)# with語句
# 適用於執行某段**a之前,進行預處理,執行**a結束之後,進行清理操作
# 檔案讀取的正常步驟:開啟、讀取、關閉
# 要保證,不管讀取檔案操作有沒有異常,都要關閉檔案
# try:
# 開啟檔案
# 讀取檔案
# finally:
# 關閉檔案
# 上述過於繁瑣
)# 應該以二進位制檔案讀取"rb"
f.readlines(
)except exception as e:
print
("異常提示"
, e)
finally
:print
("***"
) f.close(
)# 方案二
)# 自定義上下文管理器
class
test
:def
__enter__
(self)
:print
("enter"
)return
"***x"
def__exit__
(self, exc_type, exc_val, exc_tb)
:print
(self, exc_type, exc_val, exc_tb)
print
("exit"
)with test(
)as x:
# 先enter -> body -> exit
# x是enter方法執行的返回值
print
("body"
, x)
# x:"***x"
# 生成器
# 讓生成器通過乙個裝飾器快速變成乙個上下文管理器
import contextlib
@contextlib.contextmanager # 上下文管理器有進有出,有返回值
contextlib.closing快速讓擁有close(
)方法的物件變成上下文管理器
deftest()
:print(1
)# yield前面當作enter
yield
"***"
print(2
)# yield後面當作exit
with test(
)as x:
print(3
, x)
# 當作中間部分
# 把主要業務邏輯部分和異常處理部分進行分離
@contextlib.contextmanager
defze()
:try
:yield
except zerodivisionerror as e:
print
("error:"
, e)
x =1
y =0
with ze():
# 上下文管理器,先yield上面try->x/y->yield下面exception
x / y
class
test
:def
t(self)
:print
("tttt"
)def
close
(self)
:print
("資源釋放"
)def
__enter__
(self)
:return self
def__exit__
(self, exc_type, exc_val, exc_tb)
: self.close(
)with test(
)as t_obj:
# t是enter方法返回值,恰恰是物件本身
t_obj.t(
)class
test
:def
t(self)
:print
("tttt"
)def
close
(self)
:print
("資源釋放"
)# contextlib.closing快速讓擁有close()方法的物件變成上下文管理器
with contextlib.closing(test())
as t_obj:
# t是enter方法返回值,恰恰是物件本身
t_obj.t(
)
# 手動丟擲異常
# 通過raise語句直接丟擲異常
defsetage
(age)
:if age <=
0or age >=20:
# print("error")
raise valueerror(
"值錯誤"
)else
:print
("設定年齡"
, age)
# 自定義異常
class
lesszero
(exception)
:# 繼承exception
def__init__
(self, msg, error_code)
: self.msg = msg
self.ec = error_code
def__str__
(self)
:return self.msg +
str(self.ec)
pass
defsetage
(age)
:if age <=
0or age >=20:
# print("error")
raise lesszero(
"值錯誤"
,404
)else
:print
("設定年齡"
, age)
try:
setage(-90
)except lesszero as l:
print
("x"
, l)
python異常處理 Python 異常處理
使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...
python異常舉例 Python異常處理
1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...
python異常處理
當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...