> 백엔드 개발 > 파이썬 튜토리얼 > Python 2.7 기본 튜토리얼: 오류 및 예외

Python 2.7 기본 튜토리얼: 오류 및 예외

黄舟
풀어 주다: 2016-12-24 17:13:59
원래의
1739명이 탐색했습니다.

.. _tut-오류:

=================================

오류 및 예외 오류 및 예외

================================ === =

지금까지 오류 메시지는 언급된 것보다 많지 않았지만

예제를 시도해 본 경우 아마도 (적어도) 두 가지

구별 가능한 오류 종류: *구문 오류* 및 *예외*.

지금까지는 오류 메시지에 대해 더 이상 논의하지 않았지만 시도한 예에서는

일부를 만났습니다. Python에는 (적어도) 두 가지 종류의 오류가 있습니다: *구문 오류* 및 *예외* .

.. _tut-syntaxerrors:

구문 오류 구문 오류

=====================

구문 오류라고도 하는 구문 오류는 아마도

Python을 배우는 동안 발생하는 가장 일반적인 종류의 불만 사항일 것입니다.

구문 오류라고도 함 해석 오류는 Python을 학습하는 과정에서 가장 흔한 실수일 수 있습니다::

>>> True print 'Hello world'

File "", line 1, ?

True 인쇄 'Hello world'

                                                                                                                                     '화살표'는

오류가 감지된 줄의 가장 빠른 지점을 가리킵니다.

화살표 *앞에 있는* 토큰에 의해 발생(또는 적어도 감지):

예제에서는 콜론

(``':'``)가 앞에 없습니다. 파일 이름과 줄 번호가 인쇄되므로

입력이 스크립트에서 나온 경우 어디에 있는지 알 수 있습니다.

파서는 오류가 있는 줄을 반복하고 작은 "화살표"를 표시합니다. 화살표가 *가리키는* 곳에서

오류(적어도 감지된 오류)가 발생합니다. 예제의 오류는 키워드

:keyword:`print` 앞에 콜론( ``':'`` )이 없기 때문에 해당 키워드에 나타납니다. 파일 이름과 줄 번호도

표시되어 오류가 발생한 스크립트와 위치를 알 수 있습니다.

.. _tut-Exceptions:

예외

==========

문이나 표현식이 구문적으로 올바른 경우에도 , 실행하려고 하면

오류가 발생할 수 있습니다. 실행 중에 감지된 오류

를 *예외*라고 하며 무조건 치명적이지는 않습니다. 곧 알게 될 것입니다

Python 프로그램에서 처리하는 방법. 그러나 대부분의 예외는

프로그램에서 처리되지 않으며 다음과 같은 오류 메시지가 표시됩니다.

완전히 문법적으로 올바른 명령문이라도 실행하려고 할 때 오류가 발생할 수도 있습니다. 프로그램을 실행하는 동안

감지된 오류를 예외라고 합니다. 일반적으로 치명적인 문제를 일으키지 않으며 곧

Python 프로그램에서 이를 제어하는 ​​방법을 배우게 됩니다. 대부분의 예외는 프로그램에서 처리되지 않지만 오류 메시지가 표시됩니다::

>>> 10 * (1/0)

역추적(가장 최근 호출이 마지막) :

파일 "", 1행, ?

ZeroDivisionError: 정수 나누기 또는 0으로 모듈로

>> 4 + 스팸* 3

역추적(가장 최근 호출 마지막):

파일 "", 라인 1, in ?

NameError: 이름 '스팸'이 정의되지 않았습니다

>>> '2' + 2

역추적(가장 최근 호출 마지막):

파일 "", 라인 1, in ?

TypeError: 'str' 및 'int' 개체를 연결할 수 없습니다

오류 메시지의 마지막 줄은 발생한 상황을

나타내며, 유형은 다음과 같습니다. 메시지의 일부로 인쇄됩니다.

예제의 유형은 :exc:`ZeroDivisionError`, :exc:`NameError` 및 :exc:`TypeError`입니다.

다음과 같이 인쇄되는 문자열 예외 유형은 발생한 내장 예외

의 이름입니다. 이는 모든 내장 예외에 적용되지만 사용자 정의 예외에 대해서는

참일 필요는 없습니다. 유용한 규칙입니다). 표준

예외 이름은 내장된 식별자입니다(예약된 키워드가 아님).

오류 메시지의 마지막 줄은 어떤 오류가 발생했는지 나타냅니다. 예외에는 다양한 유형이 있습니다. 예외 유형은

오류 메시지의 일부로 표시됩니다. 예제의 예외는 0 나누기 오류

( :exc:`ZeroDivisionError` ) 및 명명 오류입니다. ( :exc:`NameError`) 및

오류(:exc:`TypeError`)를 입력합니다. 오류 정보 인쇄 시 예외 유형은 해당 예외의 내장 이름으로 사용됩니다

디스플레이. 이는 모든 내장 예외에 적용되지만 사용자 정의 예외에는 반드시 그런 것은 아닙니다(이

는 유용한 규칙임에도 불구하고). 표준 예외 이름은 내장 식별자입니다(예약 키워드 없음).

줄의 나머지 부분은 예외 유형과 원인

에 따라 세부 정보를 제공합니다. 즉, 내용은 예외 유형에 따라 다릅니다.

오류 메시지의 앞 부분은 예외가 발생한 컨텍스트

를 스택 추적 형식으로 보여줍니다. 일반적으로 스택 추적

추적 목록 소스가 포함되어 있습니다. 그러나

표준 입력

에서 읽은 줄은 표시되지 않습니다. 오류 메시지의 전반부는 예외가 발생한 위치를 스택 형식으로 나열합니다. 일반적으로 소스 코드 줄은 스택에 나열되지만 표준 입력에서 나오는 소스 코드는 표시되지 않습니다.

:ref:`bltin-Exceptions`에는 내장된 예외와 그 의미가 나열되어 있습니다.

.. _tut-handling:

예외 처리 예외 제어

====================== ======

선택한 예외를 처리하는 프로그램을 작성하는 것이 가능합니다.

유효한 정수가 나올 때까지 사용자에게 입력을 요청하는 다음 예를 보세요

입력했지만 사용자가 프로그램을 중단할 수 있습니다(:kbd:`Control-C` 또는

운영 체제가 지원하는 모든 것을 사용). 사용자가 생성한 중단

:exc:`KeyboardInterrupt` 예외를 발생시켜 신호를 보냅니다. :

알려진 예외를 제어하기 위해 프로그램을 작성할 수 있습니다.

이 유효한 정수를 얻을 때까지 사용자에게 정보를 입력해야 하고 사용자가 프로그램을 중단할 수 있도록 하는 아래 예를 참조하세요(:kbd:`Control-C` 또는

등 사용). else 운영 체제에서 지원하는 작업) 사용자가 생성한 인터럽트는

:exc:`KeyboardInterrupt` 예외를 발생시킵니다. ::

>>> while True:

... 시도:

... x = int(raw_input("숫자를 입력하세요: " ))

... break

... 제외 ValueError:

... print "죄송합니다! 유효한 숫자가 아닙니다. 다시 시도하세요..."

...

:keyword:`try` 문은 다음과 같이 작동합니다.

:keyword:`try` 문은 다음과 같이 작동합니다.

* 먼저 *try 절*( :keyword:`try`와

:keyword:`Exception` 키워드 사이의 명령문)이 실행됩니다.

먼저 *try 절*( :keyword:`try`와 :keyword:`Exception` 키워드 사이의 부분)을 실행합니다.

* 예외가 발생하지 않으면 *Exception 절*을 건너뛰고

:keyword:`try` 문 실행이 종료됩니다.

예외가 발생하지 않으면 :keyword:`try` 문 실행이 완료된 후에는 *제외 절*이 무시됩니다.

* try 절 실행 중에 예외가 발생하면

절의 나머지 부분을 건너뜁니다. 그런 다음 해당 유형이

다음 이름의 예외와 일치하면 :keyword :`Exception` 키워드인 경우에는 Except 절이 실행되고, :keyword:`try` 문 이후에 실행

이 계속됩니다.

try 절 실행 중 예외가 발생하면, 그런 다음 절의 나머지 부분은 무시됩니다.

예외가 :keyword:`prop` 키워드 뒤에 지정된 예외 유형과 일치하는 경우 해당 제외 절

이 실행됩니다. 그런 다음 :keyword:`try` 문 이후의 코드를 계속 실행하세요.

* Except

절에 명명된 예외와 일치하지 않는 예외가 발생하는 경우 처리기가 없으면 외부 :keyword:`try` 문으로 전달됩니다.

이 발견되면 *처리되지 않은 예외*이며 위에 표시된

와 같은 메시지와 함께 실행이 중지됩니다.

예외가 발생하면 Except 절 분기에 일치하는 예외가 없습니다. 이는

상위 수준:keyword:`try` 문으로 전달됩니다. 해당 처리문을 결국 찾지 못하면 *처리되지 않은 예외*로

가 되어 프로그램을 종료하고 프롬프트 메시지를 표시합니다.

:keyword:`try` 문에는

다양한 예외에 대한 처리기를 지정하기 위해 둘 이상의 예외 절이 있을 수 있습니다.

처리기 동일한 :keyword:`try` 문의 다른 핸들러가 아닌

해당 try 절에서 발생하는 예외만 처리합니다. 예를 들어,

:keyword:`try` 문에는 각각 다른 예외 처리를 지정하는 여러 개의 제외 절이 포함될 수 있습니다

. 최대 하나의 분기만 실행됩니다. 예외 처리기는 해당 try 절만 처리합니다

동일한 :keyword:`try` 문에서 발생한 예외, 다른 절에서 발생한 예외는 처리되지 않습니다

. Except 절은 괄호 안에 여러 예외 이름을 나열할 수 있습니다. 예::

... Except (RuntimeError, TypeError, NameError):

... pass

The 마지막 제외 절은 예외 이름을 생략하여 와일드카드 역할을 할 수 있습니다.

이 방법을 사용하면 실제 프로그래밍 오류를 가리기가 쉽기 때문에 매우 주의해서 사용하세요

! 또한 오류 메시지를 인쇄한 다음 예외를 다시 발생시키는 데 사용할 수도 있습니다

(호출자가 예외를 처리하도록 허용):

마지막 제외 절 예외 이름을 생략할 수 있습니다. 이를 와일드카드로 사용합니다.

이 방법은 실제 프로그램 오류를 가리고 사람들이 오류를 발견하는 것을 방지할 수 있으므로 주의해서 사용해야 합니다! 또한 한 줄의 오류 정보를 인쇄한 다음 예외를 다시 발생시키는 데 사용할 수 있습니다(이를 통해 호출자가 예외를 더 잘 처리할 수 있습니다)::

import sys

try:

f = open('myfile.txt')

s = f.readline()

i = int(s.strip())

IOError 제외 (errno, strerror):

인쇄 "I/O 오류({0}): {1}".format(errno, strerror)

제외 ValueError:

print "데이터를 정수로 변환할 수 없습니다."

제외:

print "예기치 않은 오류:", sys.exc_info()[0]

raise

:keyword:`try` ... :keyword:`Exception` 문에는 선택적 *else

절*이 있으며, 이 절이 있는 경우 모든 제외 절을 따라야 합니다.

try 절에서 예외가 발생하지 않는 경우 실행해야 하는 코드입니다.

예:

:keyword:`try` ... :keyword :`Exception` 문에는 *else 절*이 있을 수 있습니다.

이 절은 모든 제외 절 뒤에만 나타날 수 있습니다. try 문이 예외를 발생시키지 않고 일부 코드를 실행해야 하는 경우

절을 사용할 수 있습니다. 예를 들어::

for arg in sys.argv[1:]:

try:

f = open(arg, 'r')

IOError:

제외 ' 열 수 없음', arg

            else: 🎜>

                 f.close()

:keyword:`else 사용 ` 절은

:keyword:`try` 절에 추가 코드를 추가하는 것보다 낫습니다. 왜냐하면

:keyword로 보호되는 코드에서 발생하지 않은 예외를 실수로 포착하는 것을 방지하기 때문입니다

:`try` ...

:keyword:`Exception` 문.

:keyword:`else` 절을 사용하는 것이 :keyword:`try` 절에 코드를 추가하는 것보다 낫습니다.

이렇게 하면 :keyword:`try` ... :keyword:`out ` 예기치 않은 차단이 보호하는 코드에서 발생하는

예외가 되지 않을 것으로 예상됩니다.

예외가 발생하면

예외의 *인수*라고도 하는 관련 값이 있을 수 있습니다. 인수의 존재 여부와 유형은

예외에 따라 다릅니다. type.

예외가 발생하면 해당 예외의 *매개변수*로 존재하는 첨부된 값이 있을 수 있습니다. 이 매개변수의 존재 여부와

유형은 예외 유형에 따라 다릅니다.

Exception 절은 예외 이름(또는 튜플) 뒤에 변수를 지정할 수 있습니다.

변수는

``인스턴스에 저장된 인수를 사용하여 예외 인스턴스에 바인딩됩니다. .args``. 편의상 예외 인스턴스는

:meth:`__str__`을 정의하므로

``.args``를 참조하지 않고도 인수를 직접 인쇄할 수 있습니다.

예외 이름(목록) 뒤에는 Except 절에 대한 변수를 지정할 수도 있습니다. 이 변수는 ``instance.args``의 인수에 저장되는 예외 인스턴스

에 바인딩됩니다. 편의를 위해 예외 인스턴스

``.args``를 참조하지 않고 인쇄 매개변수에 직접 액세스할 수 있도록 :meth:`__str__`을 정의합니다.

예외를 발생시키기 전에 먼저 인스턴스를 생성하고

원하는 대로 속성을 추가할 수도 있습니다.

이런 방식은 권장되지 않습니다. 대신, 더 나은 접근 방식은 매개변수를 예외(또는 여러

매개변수를 전달하려는 경우 튜플)에 전달하고 이를 메시지 속성에 바인딩하는 것입니다. 예외가 발생하면

예외가 발생하기 전에 지정된 모든 속성을 바인딩합니다. ::

>>> try:

... raise Exception('spam', 'eggs')

... 예외를 inst로 제외:

... print type(inst) # 예외 인스턴스

... print inst.args # .args에 저장된 인수

... print inst ... # __str__을 사용하면 인수를 직접 인쇄할 수 있습니다

... x, y = inst # __getitem__을 사용하면 인수를 직접 압축 해제할 수 있습니다

... 인쇄 'x = ', x

... print 'y =', y

...

<'Exceptions.Exception' 입력>

('스팸', '계란')

('스팸', '계란')

x = 스팸

y = 계란

예외에 인수가 있는 경우

처리되지 않은 예외 메시지의 마지막 부분('세부사항')으로 인쇄됩니다

("세부정보").

예외 핸들러는

try 절에서 즉시 발생하는 예외를 처리할 뿐만 아니라, 호출된 함수 내부에서 발생하는 경우에도

간접적으로

예를 들어,

예외 처리 핸들러는 try 절에서 호출된 함수에서 예외가 발생하더라도(

이 간접적인 경우에도) 직접 발생하는 예외를 처리할 수 없습니다. , 같은 방법으로 처리할 수 있습니다. 예::

>>> def this_fails():

... x = 1/0

...

> ;>> 시도:

... this_fails()

... 세부 사항으로 ZeroDivisionError 제외:

... 인쇄 '런타임 오류 처리 : ',detail

...

런타임 오류 처리: 정수 나누기 또는 0으로 모듈로

.. _tut-raising:

올리기 예외 예외 발생

===========================

:keyword:`raise` 문을 사용하면 프로그래머가 지정된

예외가 발생하도록 강제할 수 있습니다. 예:

프로그래머는 :keyword:`raise` 문을 사용하여 지정된 예외가 발생하도록 할 수 있습니다. 예::

>>> raise NameError('HiThere')

역추적(가장 최근 호출 마지막):

파일 "" , 1행, ?

NameError: HiThere

:keyword:`raise`에 대한 유일한 인수는 발생될 예외를 나타냅니다.

이것은 예외여야 합니다. 인스턴스 또는 예외 클래스(

:class:`Exception`에서 파생된 클래스).

발생할 예외는 :keyword:`raise`의 고유 매개변수로 식별됩니다. 예외 인스턴스이거나

예외 클래스(:class:`Exception`에서 상속된 클래스)여야 합니다.

예외가 발생했는지 확인해야 하지만 이를 처리할 의도는 없는 경우

:keyword:`raise` 문의 간단한 형식을 사용하면

예외 다시 발생:

예외 발생 여부를 알아야 하지만 처리하고 싶지 않은 경우 :keyword:`raise`

문을 사용하면 됩니다. 쉽게 다시 올리려면 이 예외가 발생합니다.

>>> try:

... raise NameError('HiThere')

... NameError:

제외 . print '예외가 날아갔습니다!'

... raise

...

예외가 날아갔습니다!

역추적(가장 최근 호출 last):

파일 "", 2행, ?

NameError: HiThere

.. _tut-userExceptions:

사용자 정의된 예외 사용자 정의 예외

==================================== === =

프로그램은 새로운 예외 클래스를 생성하여 자체 예외 이름을 지정할 수 있습니다(Python 클래스에 대한 자세한 내용은

:ref:`tut-classes` 참조).

직접 또는 간접적으로 :exc:`Exception` 클래스에서 파생됩니다.

예:

프로그램에서 새로운 예외 유형을 생성하여 고유한 예외 이름을 지정할 수 있습니다. (Python 수업 내용은

see:ref:`tut-classes`를 참고하세요). 예외 클래스는 일반적으로

:exc:`Exception` 클래스에서 직접 또는 간접적으로 파생되어야 합니다. 예::

>>> class MyError(Exception):

... def __init__(self, value):

... self.value = value

... def __str__(self):

. .. return repr(self.value)

...

>>> try:

... raise MyError(2*2)

... MyError as e:

제외 ... print '내 예외가 발생했습니다. 값:', e.value

...

내 예외가 발생했습니다. 값: 4

>>> raise MyError('죄송합니다!')

   역추적(가장 최근 호출 마지막):

     파일 "", line 1, in ?

   __main__.MyError: '죄송합니다!'

이 예에서는 :class:`Exception`의 기본 :meth:`__init__`가

재정의되었습니다.  새로운 동작은 단순히 *value* 속성을 생성합니다.  이는

*args* 속성을 생성하는 기본 동작을 대체합니다.

在这个例子中,:class:`Exception` 默认的 :meth:`__init__` 被覆盖。새로운 방법简单的创建

value 属性.这就替换了原来创建 *args* 属性的方式。

다른 클래스가 할 수 있는 모든 작업을 수행하는 예외 클래스를 정의할 수 있지만

일반적으로 단순하게 유지되며

예외 처리기에 의해 오류에 대한 정보를 추출할 수 있는 여러 속성만 제공하는 경우가 많습니다.  

여러 가지 오류가 발생할 수 있는 모듈을 생성할 때 일반적인 관행은

해당 모듈에서 정의된 예외에 대한 기본 클래스를 생성하고

이를 생성하는 하위 클래스를 생성하는 것입니다. 다양한 오류 조건에 대한 특정 예외 클래스:

异常类中可以定义任何其它类中可以定东西,但是通常为了保持简单,只单,只单

其中加入几个属性信息,以供异常处理句柄提取。如果一个new创建的模块中需要

抛个几种는다른错误时,一个个个常的작법是为该模块定义一个异常基类,然后针

对不同的错误类型派生流对应的异常子类。 ::

   class Error(Exception):

       """이 모듈의 예외에 대한 기본 클래스입니다."""

       pass

   class InputError(Error):

       """입력 오류로 인해 예외가 발생했습니다.

       속성:

           expr - - 오류가 발생한 입력식

           msg  - 오류 설명

       """

       def __init__(self, expr, msg):

           self.expr = expr

           self.msg = msg

   class TransitionError(Error):

       """작업이

       허용됩니다.

       속성:

           prev -- 전환 시작 시 상태

           next -- 새로운 상태 시도

           msg -- 특정 전환이 허용되지 않는 이유에 대한 설명

       """

       def __init__(self, prev, next, msg):

           self.prev = prev

           self.next = next

           self.msg = msg

대부분의 예외는

이름 지정과 유사하게 "Error"로 끝나는 이름으로 정의됩니다. 표준 예외.

与标准异常相似 ,大多数异常的命名都以“Error”结尾。

많은 표준 모듈은 발생할 수 있는 오류를 보고하기 위해 자체 예외를 정의합니다

그들이 정의한 함수에서 발생합니다.  클래스에 대한 자세한 내용은

:ref:`tut-classes` 장에서 확인하세요.

很多标准模块中書 义了自己的异常,以报告在他们所定义的函数中可能发生

的错误。关于类的进一步信息请参见 :ref:`tut-classes` 一章。

.. _tut-cleanup:

Clean의 정의- up Actions 정의

====================================== =============

:keyword:`try` 문에는

실행해야 하는 정리 작업을 정의하기 위한 또 다른 선택적 절이 있습니다. 모든 상황에서.  예를 들어

:

:keyword:`try` 语句还有另一个可选的子句,目的在于定义在任何情况下功一定要执行的功

能。例如 ::

   >>> try:

   ...     raise KeyboardInterrupt

   ... 마침내:

   ...     'Goodbye, world!' 인쇄

   ...

   안녕, 세상!

   역추적(가장 최근 호출 마지막):

     파일 "", 2번째 줄, ?

   KeyboardInterrupt

*finally 절*은 예외 발생 여부에 관계없이 :keyword:`try`

문을 떠나기 전에 항상 실행됩니다. :keyword:`try` 절에서

예외가 발생하고

처리되지 않은 경우

:keyword:`제외` 절(또는 :keyword:`제외` 또는

:keyword:`else` 절에서 발생), :keyword:` 다음에 다시 발생합니다. finally` 절이

실행되었습니다. :keyword:`try` 문의 다른 절이 실행될 때 :keyword:`finally` 절도 "나가는 중에"

실행됩니다.

:keyword:`break`, :keyword:`continue` 또는 :keyword:`return` 명령문을 통해

더 복잡한 예(:keyword:`Exception` 및

동일한 :keyword:`try` 문에 있는 :keyword:`finally` 절은 Python 2.5부터 작동합니다):

예외 발생 여부에 관계없이 *finally 절* 프로그램이 떠날 때 종료됩니다. :keyword:`try`는 반드시

후에 실행됩니다. :keyword:`Exception`에 의해 포착되지 않은

예외가 :keyword:`try` 문에서 발생하는 경우(또는 :keyword:`prop` 또는 :keyword:`else` 절에서 발생하는 경우,

:keyword:`finally` 절이 실행된 후에 다시 발생합니다. :keyword:`try` 문은

뒤에 :keyword:`break`, :keyword:`continue` 또는 :keyword:`return` 문이

종료하는 경우에도 :keyword가 실행됩니다. 'finally' 절. 다음은 더 복잡한 예입니다(동일한 :keyword:`try` 문에서 :keyword:`Exception` 및 :keyword:`finally`

절의 작업 방법은 Python 2.5와 동일합니다). :

>>> def Divide(x, y):

... 시도:

... 결과 = x / y

... ZeroDivisionError:

제외 ... "0으로 나누기!" 인쇄

... else:

.. . 결과

... finally:

... "Executing finally 절" 인쇄

...

& GT ;>> 1)

결과는 2

finally 절 실행

>>> Divide(2, 0)

0으로 나누기!

finally 절 실행

>>> Divide("2", "1")

finally 절 실행

역추적(최근 호출 마지막 ):

파일 "", 라인 1, in ?

파일 "", 라인 3, in Divide

TypeError: 지원되지 않는 피연산자 /: 'str' 및 'str'

보시다시피 :keyword:`finally` 절은 모든 이벤트에서 실행됩니다.

:exc:` 두 문자열을 나누어 발생하는 TypeError`는

:keyword:`Exception` 절로 처리되지 않으므로 :keyword:`finally`

절이 실행된 후에 다시 발생합니다.

보시다시피 :keyword:`finally` 절은 어떤 경우에도

을 실행합니다. :exc:`TypeError`

는 두 개의 문자열이 나누어질 때 발생하고 :keyword:`book` 절에 의해 포착되지 않으므로

:keyword:`finally`에서 다시 발생합니다. 조항이 실행됩니다.

실제 애플리케이션에서 :keyword:`finally` 절은

파일 또는 네트워크 연결과 같은 외부 리소스를 해제하는 데

유용합니다. 리소스 사용이 성공했습니다.

실제 애플리케이션에서는 :keyword:`finally` 절을 사용하여 외부 리소스(파일

또는 네트워크 연결 등)를 해제합니다. 사용에 오류가 있는지 여부.

.. _tut-cleanup-with:

사전 정의된 정리 작업 사전 정의된 정리 작업

=============== = =======================================

일부 개체는 표준 정리를 정의합니다. -up 객체를 사용한 작업

이 성공했는지 실패했는지에 관계없이 객체

가 더 이상 필요하지 않을 때 수행할 작업을 열려고 시도하는 다음 예를 살펴보세요.

그 내용을 화면에 인쇄합니다.

일부 개체는 개체 작업의 성공 여부에 관계없이 개체가 더 이상 필요하지 않은 경우 표준 정리 동작을 정의합니다

곧 시행될 예정입니다. 다음 예제에서는 파일을 열고 해당 내용을 화면에 인쇄하려고 시도합니다. ::

for line in open("myfile.txt"):

print line

이 코드의 문제점은 파일을 불확실한 동안 열어둔다는 것입니다

코드 실행이 완료된 후의 시간입니다.

간단한 스크립트에서는 문제가 되지 않지만,

:keyword:` with` 문을 사용하면

항상 신속하고 정확하게 정리되는 방식으로 파일과 같은 개체를 사용할 수 있습니다. :

이 코드의 문제점은 작업 후 즉시 정리되지 않는다는 것입니다. 코드가 실행됩니다. 열린 파일을 닫습니다. 간단한 스크립트

에서는 문제가 없지만 대규모 애플리케이션에서는 문제가 발생할 수 있습니다. :keyword:`with` 문을 사용하면 파일과 같은 개체를

항상 시기적절하고 정확한 방식으로 정리할 수 있습니다. ::

with open("myfile.txt") as f:

for line in f:

print line

문이 실행된 후 파일 *f *는 행을 처리하는 동안

문제가 발생한 경우에도 항상 닫혀 있습니다.

미리 정의된 정리 작업을 제공하는 다른 객체는 해당 문서에 이를 표시합니다.

파일 *f*는 파일의 데이터를 처리하는 동안 오류가 발생하더라도 명령문이 실행된 후 항상 닫힙니다.

다른 개체가 미리 정의된 정리 동작을 제공하는 경우 해당 문서를 확인하세요.

위 내용은 Python 2.7의 기본 튜토리얼입니다. 오류 및 예외 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿