首先寫乙個簡單的異常處理
try:
f = open('demo.txt', 'w')
# 丟擲異常
raise typeerror
# 捕獲異常
except typeerror as e:
print('typeerror')
f.close()
except valueerror as e:
print('valueerror')
f.close()
except exception as e:
print('exception')
f.close()
finally:
print('end...')
# typeerror
# end...
使用上下文管理器的目的就是簡化以上的操作
with open(『demo.txt』, 『w』) as f:
f.write()
那類可以支援上下文管理器嗎?
class sample(object):
def __enter__(self):
print('start')
return self
def demo(self):
print('sample...')
def __exit__(self, exc_type, exc_val, exc_tb):
print(exc_type) # 異常類 print(exc_val) # 異常值 'sample' object has no attribute 'demos'
print(exc_tb) # 追蹤資訊,也就是在哪一行報錯 print('ending')
with sample() as sample:
sample.demos()
想要類支援上下文管理器必須要有__enter__和__exit__方法
還有一種更簡單的上下文管理器,通過修飾器
import contextlib
@contextlib.contextmanager
def text(name):
print('start...')
yield {}
print('ending...')
# yield 上面的相當於__enter__函式,下面相當於__exit__函式
with text('juren') as f:
print('operation')
# start...
# operation
# ending...
類與物件深度問題與解決技巧(1)
比如我們想定義乙個inttuple類,表示接受引數後,只取其中int型別,且大於0的,然後存為tuple型別 首先我們想到繼承父類tuple,然後修改一下 class inttuple tuple def init self,iterable for i in iterable ifisinstan...
類與物件深度問題
defnew cls 建立乙個類物件,自動執行,當期執行時如果沒有創造物件並且返回則不會執行 init 方法,因為 init 方法是只有物件被建立時才會自動呼叫。一般init會自動呼叫是因為物件被自動建立了,所有類的父類object有這個功能,噹噹你執行了 new 之後object不會在執行,所以假...
類與物件(上)
this指標 c語言中,結構體中只能定義變數,在c 中,結構體內不僅可以定義變數,也可以定義函式。結構體的定義,在c 中更喜歡用class來代替。class classname 一定要注意後面的分號 類的兩種定義方式 1 宣告和定義全部放在類體中,需要注意 成員函式如果在類中定義,編譯器可能會將其當...