python
이 튜토리얼에서는 예제를 통해 try, except 및 finally 문을 사용하여 Python 프로그램에서 예외를 처리하는 방법을 배웁니다.
파이썬에는 프로그램에 오류가 발생할 때 발생하는 많은 내장 예외가 있습니다(프로그램에 문제가 있음).
이러한 예외가 발생하면 Python 인터프리터는 현재 프로세스를 중지하고 처리될 때까지 호출 프로세스에 전달합니다. 처리하지 않으면 프로그램이 중단됩니다.
예를 들어, A
함수가 있는 프로그램을 생각해 봅시다. B
함수를 호출하는 , 차례로 C
함수를 호출합니다. . C
함수에서 예외가 발생하는 경우 그러나 C
에서는 처리되지 않습니다. , 예외는 B
로 전달됩니다. 그런 다음 A
로 .
처리되지 않으면 오류 메시지가 표시되고 프로그램이 갑자기 예기치 않게 중단됩니다.
<시간>
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)
이 프로그램은 위의 프로그램과 동일한 출력을 가집니다.
<시간>
위의 예에서 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 프로그래밍에서 런타임에 오류가 발생하면 예외가 발생합니다. 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!
<시간>
어떤 상황에서는 코드 블록이 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
이전 페이지다음 페이지 일반적으로 명령문은 순차적으로 실행됩니다. 함수의 첫 번째 명령문이 먼저 실행되고 두 번째 명령문이 실행되는 식입니다. 코드 블록을 여러 번 실행해야 하는 상황이 있을 수 있습니다. 프로그래밍 언어는 더 복잡한 실행 경로를 허용하는 다양한 제어 구조를 제공합니다. 루프 문을 사용하면 명령문 또는 명령문 그룹을 여러 번 실행할 수 있습니다. 다음 다이어그램은 루프 문을 보여줍니다 - Python 프로그래밍 언어는 반복 요구 사항을 처리하기 위해 다음 유형의 루프를 제공합니다. 시니어 번호 루프 유형
구성품 및 소모품 Arduino UNO × 1 RFID 리더(일반) × 1 점퍼 와이어(일반) × 1 이 프로젝트 정보 이 프로젝트에서는 RFID-RC522를 Arduino와 인터페이스하고 RFID 데이터를 phpMyAdmin 데이터베이스로 보냈습니다. 이전 프로젝트와 달리 이더넷 실드를 사용하지 않습니다. 이 경우 여기에서는 Arduino에서 오는 직렬 데이터를 읽은 다음 하나의 Python 코드를 통해 phpMyAdmin에 푸시합니다. 여기에서 우리 장치는