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

Python - 예외 처리

이전 페이지다음 페이지

Python은 Python 프로그램에서 예기치 않은 오류를 처리하고 디버깅 기능을 추가하기 위해 두 가지 매우 중요한 기능을 제공합니다. −

표준 예외 목록 -

시니어 번호 예외 이름 및 설명
1

예외

모든 예외에 대한 기본 클래스

2

중지

반복자의 next() 메서드가 어떤 객체도 가리키지 않을 때 발생합니다.

3

시스템 종료

sys.exit() 함수에 의해 발생합니다.

4

표준 오류

StopIteration 및 SystemExit를 제외한 모든 기본 제공 예외에 대한 기본 클래스입니다.

5

산술 오류

수치 계산에서 발생하는 모든 오류에 대한 기본 클래스입니다.

6

오버플로 오류

계산이 숫자 유형의 최대 제한을 초과할 때 발생합니다.

7

부동 소수점 오류

부동 소수점 계산이 실패할 때 발생합니다.

8

ZeroDivisionError

모든 숫자 유형에 대해 0으로 나누거나 모듈로가 발생할 때 발생합니다.

9

어설션 오류

Assert 문이 실패할 경우 발생합니다.

10

속성 오류

속성 참조 또는 할당에 실패한 경우 발생합니다.

11

EOF 오류

raw_input() 또는 input() 함수로부터 입력이 없고 파일 끝에 도달하면 발생합니다.

12

가져오기 오류

import 문이 실패할 때 발생합니다.

13

키보드 인터럽트

사용자가 일반적으로 Ctrl+c를 눌러 프로그램 실행을 중단할 때 발생합니다.

14

조회 오류

모든 조회 오류에 대한 기본 클래스입니다.

15

색인 오류

시퀀스에서 인덱스를 찾을 수 없을 때 발생합니다.

16

키 오류

지정된 키가 사전에 없을 때 발생합니다.

17

이름 오류

로컬 또는 전역 네임스페이스에서 식별자를 찾을 수 없을 때 발생합니다.

18

UnboundLocalError

함수나 메서드의 지역 변수에 접근하려고 시도했지만 값이 할당되지 않았을 때 발생합니다.

19

환경 오류

Python 환경 외부에서 발생하는 모든 예외에 대한 기본 클래스입니다.

20

IO 오류

존재하지 않는 파일을 열려고 할 때 print 문이나 open() 함수와 같은 입출력 작업이 실패할 때 발생합니다.

21

IO 오류

운영 체제 관련 오류에 대해 발생합니다.

22

구문 오류

Python 구문에 오류가 있을 때 발생합니다.

23

들여쓰기 오류

들여쓰기가 제대로 지정되지 않은 경우 발생합니다.

24

시스템 오류

인터프리터가 내부 문제를 발견하면 발생하지만 이 오류가 발생하면 Python 인터프리터가 종료되지 않습니다.

25

시스템 종료

sys.exit() 함수를 사용하여 Python 인터프리터가 종료될 때 발생합니다. 코드에서 처리되지 않으면 인터프리터가 종료됩니다.

26

유형 오류

지정된 데이터 유형에 대해 유효하지 않은 연산이나 함수가 시도될 때 발생합니다.

27

값 오류

데이터 유형에 대한 내장 함수에 유효한 유형의 인수가 있지만 인수에 잘못된 값이 지정된 경우 발생합니다.

28

런타임 오류

생성된 오류가 어떤 범주에도 속하지 않을 때 발생합니다.

29

NotImplementedError

상속된 클래스에서 구현해야 하는 추상 메서드가 실제로 구현되지 않은 경우 발생합니다.

Python의 어설션

어설션은 프로그램 테스트가 끝나면 켜거나 끌 수 있는 온전성 검사입니다.

주장을 생각하는 가장 쉬운 방법은 그것을 raise-if에 비유하는 것입니다. 문(또는 보다 정확하게는 raise-if-not 문). 표현식이 테스트되고 결과가 false이면 예외가 발생합니다.

어설션은 버전 1.5에 도입된 Python의 최신 키워드인 assert 문에 의해 수행됩니다.

프로그래머는 종종 유효한 입력을 확인하기 위해 함수 시작 부분에 주장을 배치하고 유효한 출력을 확인하기 위해 함수 호출 후에 주장합니다.

주장 성명서

assert 문을 만나면 Python은 함께 제공되는 표현식을 평가하며, 이는 사실일 것입니다. 표현식이 거짓이면 Python은 AssertionError를 발생시킵니다. 예외.

구문 주장의 경우 -

assert Expression[, Arguments]

어설션이 실패하면 Python은 ArgumentExpression을 AssertionError에 대한 인수로 사용합니다. AssertionError 예외는 try-except 문을 사용하여 다른 예외와 같이 catch하고 처리할 수 있지만 처리되지 않으면 프로그램을 종료하고 역추적을 생성합니다.

예시

다음은 온도를 켈빈도에서 화씨도로 변환하는 함수입니다. 0도 켈빈은 최대한 춥기 때문에 음의 온도가 보이면 기능이 해제됩니다 -

라이브 데모
#!/usr/bin/python
def KelvinToFahrenheit(Temperature):
   assert (Temperature >= 0),"Colder than absolute zero!"
   return ((Temperature-273)*1.8)+32
print KelvinToFahrenheit(273)
print int(KelvinToFahrenheit(505.78))
print KelvinToFahrenheit(-5)

위의 코드가 실행되면 다음 결과가 생성됩니다 -

32.0
451
Traceback (most recent call last):
File "test.py", line 9, in <module>
print KelvinToFahrenheit(-5)
File "test.py", line 4, in KelvinToFahrenheit
assert (Temperature >= 0),"Colder than absolute zero!"
AssertionError: Colder than absolute zero!

예외란 무엇입니까?

예외는 프로그램 명령의 정상적인 흐름을 방해하는 프로그램 실행 중에 발생하는 이벤트입니다. 일반적으로 Python 스크립트는 대처할 수 없는 상황에 직면하면 예외가 발생합니다. 예외는 오류를 나타내는 Python 개체입니다.

Python 스크립트에서 예외가 발생하면 즉시 예외를 처리해야 합니다. 그렇지 않으면 종료되고 종료됩니다.

예외 처리

의심스러운이 있는 경우 예외를 일으킬 수 있는 코드의 경우 try:에 의심스러운 코드를 배치하여 프로그램을 방어할 수 있습니다. 차단하다. try:블록 뒤에 except:를 포함합니다. 문 다음에 가능한 한 우아하게 문제를 처리하는 코드 블록이 옵니다.

구문

다음은 try....except...else의 간단한 구문입니다. 블록 -

try:
   You do your operations here;
   ......................
except ExceptionI:
   If there is ExceptionI, then execute this block.
except ExceptionII:
   If there is ExceptionII, then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

다음은 위에서 언급한 구문에 대한 몇 가지 중요한 사항입니다 -

예시

이 예제는 파일을 열고, 파일에 내용을 쓰고, 아무 문제가 없기 때문에 정상적으로 나옵니다 -

라이브 데모
#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"
   fh.close()

이것은 다음 결과를 생성합니다 -

Written content in the file successfully

예시

이 예제는 쓰기 권한이 없는 파일을 열려고 하므로 예외가 발생합니다 -

라이브 데모
#!/usr/bin/python

try:
   fh = open("testfile", "r")
   fh.write("This is my test file for exception handling!!")
except IOError:
   print "Error: can\'t find file or read data"
else:
   print "Written content in the file successfully"

이것은 다음 결과를 생성합니다 -

Error: can't find file or read data

제외 예외가 없는 조항

다음과 같이 정의된 예외 없이 예외 문을 사용할 수도 있습니다. -

try:
   You do your operations here;
   ......................
except:
   If there is any exception, then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

이러한 종류의 시도 제외 문은 발생하는 모든 예외를 포착합니다. 이러한 종류의 try-except 문을 사용하는 것은 모든 예외를 포착하지만 프로그래머가 발생할 수 있는 문제의 근본 원인을 식별하지 못하게 하기 때문에 좋은 프로그래밍 방법으로 간주되지 않습니다.

제외 여러 예외가 있는 절

제외도 동일하게 사용할 수 있습니다. 다음과 같이 여러 예외를 처리하는 문 -

try:
   You do your operations here;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   If there is any exception from the given exception list, 
   then execute this block.
   ......................
else:
   If there is no exception then execute this block. 

마침내 절

마침내:를 사용할 수 있습니다. 시도:와 함께 차단 차단하다. finally 블록은 try 블록에서 예외가 발생했는지 여부에 관계없이 실행해야 하는 모든 코드를 넣는 곳입니다. try-finally 문의 구문은 다음과 같습니다. -

try:
   You do your operations here;
   ......................
   Due to any exception, this may be skipped.
finally:
   This would always be executed.
   ......................

else를 사용할 수 없습니다. 마지막 절과 함께 절.

예시

라이브 데모
#!/usr/bin/python

try:
   fh = open("testfile", "w")
   fh.write("This is my test file for exception handling!!")
finally:
   print "Error: can\'t find file or read data"

쓰기 모드에서 파일을 열 수 있는 권한이 없는 경우 다음 결과가 생성됩니다. -

Error: can't find file or read data

다음과 같이 같은 예를 더 깔끔하게 작성할 수 있습니다. -

라이브 데모
#!/usr/bin/python

try:
   fh = open("testfile", "w")
   try:
      fh.write("This is my test file for exception handling!!")
   finally:
      print "Going to close the file"
      fh.close()
except IOError:
   print "Error: can\'t find file or read data"

try에서 예외가 발생했을 때 블록, 실행은 즉시 finally로 전달됩니다. 차단하다. 마침내 블록이 실행되면 예외가 다시 발생하고 except에서 처리됩니다. try-except의 다음 상위 계층에 있는 경우 명령문 성명서.

예외 주장

예외는 인수를 가질 수 있습니다. , 문제에 대한 추가 정보를 제공하는 값입니다. 인수의 내용은 예외에 따라 다릅니다. 다음과 같이 예외 절에 변수를 제공하여 예외의 인수를 캡처합니다. -

try:
   You do your operations here;
   ......................
except ExceptionType, Argument:
   You can print value of Argument here...

단일 예외를 처리하는 코드를 작성하는 경우 예외 문에서 예외 이름 뒤에 변수를 지정할 수 있습니다. 여러 예외를 트래핑하는 경우 예외의 튜플 다음에 변수를 지정할 수 있습니다.

이 변수는 대부분 예외의 원인을 포함하는 예외 값을 받습니다. 변수는 튜플 형식으로 단일 값 또는 여러 값을 받을 수 있습니다. 이 튜플은 일반적으로 오류 문자열, 오류 번호 및 오류 위치를 포함합니다.

예시

다음은 단일 예외의 예입니다 -

라이브 데모
#!/usr/bin/python

# Define a function here.
def temp_convert(var):
   try:
      return int(var)
   except ValueError, Argument:
      print "The argument does not contain numbers\n", Argument

# Call above function here.
temp_convert("xyz");

이것은 다음 결과를 생성합니다 -

The argument does not contain numbers
invalid literal for int() with base 10: 'xyz'

예외 발생

raise 문을 사용하여 여러 가지 방법으로 예외를 발생시킬 수 있습니다. raise의 일반 구문 성명서는 다음과 같습니다.

구문

raise [Exception [, args [, traceback]]]

여기, 예외 예외 유형(예:NameError) 및 인수 예외 인수의 값입니다. 인수는 선택 사항입니다. 제공되지 않으면 예외 인수는 없음입니다.

마지막 인수인 traceback도 선택 사항이며(실제로 거의 사용되지 않음), 존재하는 경우 예외에 사용되는 traceback 개체입니다.

예시

예외는 문자열, 클래스 또는 개체일 수 있습니다. Python 코어에서 발생하는 대부분의 예외는 클래스이며 클래스의 인스턴스인 인수가 있습니다. 새로운 예외를 정의하는 것은 매우 쉽고 다음과 같이 할 수 있습니다 -

def functionName( level ):
   if level < 1:
      raise "Invalid level!", level
      # The code below to this would not be executed
      # if we raise the exception

참고: 예외를 잡기 위해 "except" 절은 클래스 개체 또는 단순 문자열에서 throw된 동일한 예외를 참조해야 합니다. 예를 들어 위의 예외를 캡처하려면 다음과 같이 except 절을 작성해야 합니다. -

try:
   Business Logic here...
except "Invalid level!":
   Exception handling here...
else:
   Rest of the code here...

사용자 정의 예외

또한 Python을 사용하면 표준 내장 예외에서 클래스를 파생하여 고유한 예외를 만들 수 있습니다.

다음은 RuntimeError와 관련된 예입니다. . 여기에서 RuntimeError에서 서브클래싱된 클래스가 생성됩니다. . 예외가 발생했을 때 보다 구체적인 정보를 표시해야 할 때 유용합니다.

try 블록에서 사용자 정의 예외가 발생하고 예외 블록에서 catch됩니다. 변수 e는 Networkerror 클래스의 인스턴스를 만드는 데 사용됩니다. .

class Networkerror(RuntimeError):
   def __init__(self, arg):
      self.args = arg

따라서 위의 클래스를 정의한 후에는 다음과 같이 예외를 발생시킬 수 있습니다. -

try:
   raise Networkerror("Bad hostname")
except Networkerror,e:
   print e.args

python

  1. 파이썬 데이터 유형
  2. 파이썬 연산자
  3. 파이썬 통과 문
  4. 파이썬 함수 인수
  5. 파이썬 사전
  6. Python 오류 및 내장 예외
  7. try, except 및 finally 문을 사용하는 Python 예외 처리
  8. Python 사용자 정의 예외
  9. 파이썬 반복자
  10. 파이썬 클로저