with 문법
with는 어떻게 일합니까?
4
4
#!/usr/bin/env python
# with_example01.py
class Sample:
def __enter__(self):
print "In __enter__()"
return "Foo"
def __exit__(self, type, value, trace):
print "In __exit__()"
def get_sample():
return Sample()
with get_sample() as sample:
print "sample:", sample
실행 코드, 출력은 다음과 같습니다
bash-3.2$ ./with_example01.py
In __enter__()
sample: Foo
In __exit__()
보시다시피: 1.enter () 방법이 실행되었습니다.enter () 방법이 되돌아오는 값 - 이 예는 "Foo"입니다. 변수에 값을 부여하는 "sample"3.플롯 변수 Sample의 값이 "Foo"인 코드 블록을 실행합니다. 4.exit () 방법이 호출된 with의 진정한 강점은 이상을 처리할 수 있다는 것이다.
Sample 클래스의 exit 방법에는 세 가지 인자 val, type,trace가 있음을 알 수 있습니다.이 매개 변수들은 이상 처리에 상당히 유용하다.코드를 좀 고쳐서 구체적으로 어떻게 일을 하는지 봅시다.
#!/usr/bin/env python
# with_example02.py
class Sample:
def __enter__(self):
return self
def __exit__(self, type, value, trace):
print "type:", type
print "value:", value
print "trace:", trace
def do_something(self):
bar = 1/0
return bar + 10
with Sample() as sample:
sample.do_something()
이 예에서 with 뒤에 있는 getsample ()이 Sample ()로 변경되었습니다.이것은 아무런 관계가 없습니다. with 뒤에 있는 문장에 따라 되돌아오는 대상에enter () 와 exit () 방법만 있으면 됩니다.이 예에서 Sample ()의 enter () 방법은 새로 만든 Sample 대상을 되돌려주고 변수sample에 값을 부여합니다.
코드 실행 후:
bash-3.2$ ./with_example02.py
type:
value: integer division or modulo by zero
trace:
Traceback (most recent call last):
File "./with_example02.py", line 19, in
sample.do_something()
File "./with_example02.py", line 15, in do_something
bar = 1/0
ZeroDivisionError: integer division or modulo by zero
실제로 with 뒤에 있는 코드 블록에서 이상이 발생하면 exit () 방법이 실행됩니다.예에서 보듯이 이상을 던질 때 그와 관련된 type,value,stack trace가 exit() 방법에 전달되기 때문에 던진 Zero Division Error 이상이 인쇄되었다.라이브러리를 개발할 때 자원 정리, 파일 닫기 등을 exit 방법에 넣을 수 있습니다.
출처:http://blog.kissdata.com/2014/05/23/python-with.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.