산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

try, except 및 finally 문을 사용하는 Python 예외 처리

try, except 및 finally 문을 사용한 Python 예외 처리

이 튜토리얼에서는 예제를 통해 try, except 및 finally 문을 사용하여 Python 프로그램에서 예외를 처리하는 방법을 배웁니다.

동영상:Python 예외 처리(try..except..finally)

Python의 예외

파이썬에는 프로그램에 오류가 발생할 때 발생하는 많은 내장 예외가 있습니다(프로그램에 문제가 있음).

이러한 예외가 발생하면 Python 인터프리터는 현재 프로세스를 중지하고 처리될 때까지 호출 프로세스에 전달합니다. 처리하지 않으면 프로그램이 중단됩니다.

예를 들어, A 함수가 있는 프로그램을 생각해 봅시다. B 함수를 호출하는 , 차례로 C 함수를 호출합니다. . C 함수에서 예외가 발생하는 경우 그러나 C에서는 처리되지 않습니다. , 예외는 B로 전달됩니다. 그런 다음 A로 .

처리되지 않으면 오류 메시지가 표시되고 프로그램이 갑자기 예기치 않게 중단됩니다.

<시간>

Python에서 예외 잡기

Python에서는 try를 사용하여 예외를 처리할 수 있습니다. 성명서.

예외를 일으킬 수 있는 중요한 작업은 try 안에 있습니다. 절. 예외를 처리하는 코드는 except 조항.

따라서 예외를 포착한 후 수행할 작업을 선택할 수 있습니다. 다음은 간단한 예입니다.

# import module sys to get the type of exception
import sys

randomList = ['a', 0, 2]

for entry in randomList:
    try:
        print("The entry is", entry)
        r = 1/int(entry)
        break
    except:
        print("Oops!", sys.exc_info()[0], "occurred.")
        print("Next entry.")
        print()
print("The reciprocal of", entry, "is", r)

출력

The entry is a
Oops! <class 'ValueError'> occurred.
Next entry.

The entry is 0
Oops! <class 'ZeroDivisionError'> occured.
Next entry.

The entry is 2
The reciprocal of 2 is 0.5

이 프로그램에서는 randomList의 값을 반복합니다. 목록. 앞서 언급했듯이 예외가 발생할 수 있는 부분은 try 안에 위치합니다. 차단합니다.

예외가 발생하지 않으면 except 블록을 건너뛰고 정상적인 흐름이 계속됩니다(마지막 값에 대해). 그러나 예외가 발생하면 except 블록(첫 번째 및 두 번째 값).

여기서 exc_info()을 사용하여 예외 이름을 인쇄합니다. sys 내부의 함수 기준 치수. a ValueError 발생 및 0 ZeroDivisionError 원인 .

Python의 모든 예외는 기본 Exception에서 상속되기 때문에 클래스에서 다음과 같은 방식으로 위의 작업을 수행할 수도 있습니다.

# import module sys to get the type of exception
import sys

randomList = ['a', 0, 2]

for entry in randomList:
    try:
        print("The entry is", entry)
        r = 1/int(entry)
        break
    except Exception as e:
        print("Oops!", e.__class__, "occurred.")
        print("Next entry.")
        print()
print("The reciprocal of", entry, "is", r)

이 프로그램은 위의 프로그램과 동일한 출력을 가집니다.

<시간>

Python에서 특정 예외 잡기

위의 예에서 except의 특정 예외는 언급하지 않았습니다. 조항.

이것은 모든 예외를 포착하고 모든 경우를 동일한 방식으로 처리하므로 좋은 프로그래밍 방법이 아닙니다. except 예외를 지정할 수 있습니다. 절을 잡아야 합니다.

try 절은 except의 개수를 가질 수 있습니다. 다른 예외를 처리하는 절이지만 예외가 발생할 경우 하나만 실행됩니다.

값의 튜플을 사용하여 예외 절에 여러 예외를 지정할 수 있습니다. 다음은 의사 코드의 예입니다.

try:
   # do something
   pass

except ValueError:
   # handle ValueError exception
   pass

except (TypeError, ZeroDivisionError):
   # handle multiple exceptions
   # TypeError and ZeroDivisionError
   pass

except:
   # handle all other exceptions
   pass
<시간>

Python에서 예외 발생

Python 프로그래밍에서 런타임에 오류가 발생하면 예외가 발생합니다. raise을 사용하여 수동으로 예외를 발생시킬 수도 있습니다. 키워드.

선택적으로 예외가 발생한 이유를 명확히 하기 위해 예외에 값을 전달할 수 있습니다.

>>> raise KeyboardInterrupt
Traceback (most recent call last):
...
KeyboardInterrupt

>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument

>>> try:
...     a = int(input("Enter a positive integer: "))
...     if a <= 0:
...         raise ValueError("That is not a positive number!")
... except ValueError as ve:
...     print(ve)
...    
Enter a positive integer: -2
That is not a positive number!
<시간>

다른 절을 사용한 Python 시도

어떤 상황에서는 코드 블록이 try 오류 없이 실행되었습니다. 이러한 경우 선택적 else를 사용할 수 있습니다. try 키워드 성명서.

참고 :else 절의 예외는 앞의 except 절에서 처리되지 않습니다.

예를 살펴보겠습니다.

# program to print the reciprocal of even numbers

try:
    num = int(input("Enter a number: "))
    assert num % 2 == 0
except:
    print("Not an even number!")
else:
    reciprocal = 1/num
    print(reciprocal)

출력

홀수를 전달하는 경우:

Enter a number: 1
Not an even number!

짝수를 전달하면 역수가 계산되어 표시됩니다.

Enter a number: 4
0.25

그러나 0을 전달하면 ZeroDivisionError가 됩니다. else 내부의 코드 블록으로 앞의 except에 의해 처리되지 않습니다. .

Enter a number: 0
Traceback (most recent call last):
  File "<string>", line 7, in <module>
    reciprocal = 1/num
ZeroDivisionError: division by zero
<시간>

파이썬 시도...마침내

try Python의 문에는 선택적 finally이 있을 수 있습니다. 절. 이 절은 상관없이 실행되며 일반적으로 외부 리소스를 해제하는 데 사용됩니다.

예를 들어 네트워크를 통해 원격 데이터 센터에 연결하거나 파일 또는 GUI(그래픽 사용자 인터페이스)로 작업할 수 있습니다.

이러한 모든 상황에서 프로그램이 성공적으로 실행되었는지 여부에 관계없이 프로그램이 중지되기 전에 리소스를 정리해야 합니다. 이러한 작업(파일 닫기, GUI 닫기 또는 네트워크 연결 끊기)은 finally에서 수행됩니다. 실행을 보장하는 절입니다.

다음은 이를 설명하기 위한 파일 작업의 예입니다.

try:
   f = open("test.txt",encoding = 'utf-8')
   # perform file operations
finally:
   f.close()

이러한 유형의 구문은 프로그램 실행 중에 예외가 발생하더라도 파일이 닫히도록 합니다.


python

  1. 파이썬 키워드와 식별자
  2. Python 문, 들여쓰기 및 주석
  3. Python 변수, 상수 및 리터럴
  4. Python 유형 변환 및 유형 캐스팅
  5. 파이썬 입력, 출력 및 가져오기
  6. 파이썬 통과 문
  7. Python 전역, 지역 및 비지역 변수
  8. Python 디렉토리 및 파일 관리
  9. try, except 및 finally 문을 사용하는 Python 예외 처리
  10. Python 및 Raspberry Pi 온도 센서