with 문법

2384 단어
with 문장은 파이썬 2.5부터 도입된 비정상 처리와 관련된 기능이다

with는 어떻게 일합니까?


4
  • with 뒤에 있는 문장의 값을 구하면 대상을 되돌려주는 enter () 방법이 호출되고 이 방법의 되돌려주는 값은 as 뒤에 있는 변수에 부여됩니다

  • 4
  • with 뒤에 있는 코드 블록이 모두 실행된 후에 앞에 되돌아오는 대상의 exit () 방법을 호출합니다
  • #!/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

    좋은 웹페이지 즐겨찾기