파이썬에서 예외를 처리하는 방법

파이썬에서 예외를 처리하는 방법

예외 처리는 작동하지 않는 프로그램 부분에 대한 오류 메시지를 사용자 지정하고 표시하는 기능입니다.





웹사이트를 구축하든, API를 만들든, 모듈을 만들든, Python을 사용하여 다른 제품을 만들든 예외를 효과적으로 처리하는 능력을 통해 오류의 원인을 명시적으로 설명할 수 있습니다.





여기서는 Python에서 예외를 처리하는 방법을 살펴보겠습니다.





Python에서 예외 처리가 작동하는 방식

예외를 발생시키면 코드 블록이 실패할 때마다 메시지를 표시하도록 Python에 지시하는 것입니다. 예외 처리는 누군가에게 무게를 들어 올리라고 말하는 것과 같습니다. 그리고 그들이 할 수 없다면 그들은 당신에게 알려야 합니다.

그러나 Python에서 예외를 발생시키려면 Python에게 특정 코드 블록을 시도하고 실행하도록 지시해야 합니다. 해당 블록이 실패하면 Python에 실패한 코드에 대해 정의된 예외를 발생시키도록 요청할 수 있습니다.



파이썬 프로그래밍에서 언제 예외를 사용해야 하나요?

대부분의 경우 예외를 사용하여 표준 Python 오류를 마스킹할 수 있습니다. 그러나 이렇게 하면 디버깅 문제가 발생할 수 있으므로 주의를 기울여야 합니다. 결과적으로 최종 버그의 근본 원인을 파악하기 어려울 수 있습니다.

따라서 코드를 충분히 테스트하고 작동한다고 확신하는 경우 예외를 사용해야 합니다. 궁극적으로 코드 자체보다는 사용자 측에서 발생할 수 있는 잠재적인 오류를 처리하는 데 사용하는 것이 가장 좋습니다.





즉, 예외를 경고 도구로 사용하여 사용자에게 프로그램 사용 방법을 안내할 수 있습니다.

파이썬 예외 처리

Python에서 예외를 처리하려면 먼저 코드를 시도...제외 블록. 경우에 따라 다음을 포함해야 할 수도 있습니다. 마지막으로 필요에 따라 추가 작업을 처리하는 문.





Python 예외의 코딩 개념은 일반적으로 다음과 같습니다.

try:
'code to be executed'
except:
'error message'

앞서 언급했듯이 다음을 사용할 수도 있습니다. 마지막으로 예외 블록에서. 하지만 내부에 작성하는 코드는 마지막으로 절은 독립적이며 예외가 있든 없든 실행됩니다.

본질적으로, 내부에서 발생하는 일에 관계없이 계속 실행하려는 또 다른 코드 블록이 있는 경우에 유용합니다. 시도...제외 블록.

다음은 예입니다.

try:
print(9+6)
except:
print('error message')
finally:
print('please restart')
Output:
15
please restart

위의 코드에서, 다시 시작해 주세요 예외가 있는지 여부에 관계없이 계속 실행됩니다.

NS 또 다른 조건도 따를 수 있습니다 제외하고 성명:

try:
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: B needs to be defined

이제 정의된 'B'로 다시 시도하십시오.

try:
B = 5
C = 2 + B
except:
print('B needs to be defined')
else:
print(u'Added successfully! The result is %s'%(C))
Output: Added successfully! The result is 7

위의 예는 표준화되지 않은 예외입니다. 그러나 기본 제공(정의된) 예외를 표준화되지 않은 예외와 결합하면 보다 명시적인 예외가 발생할 수 있습니다.

try:
C = 2 + B
except NameError as err:
print(err, ':', 'B needs to be defined, please')
else:
print(u'Added successfully! The result is %s'%(C))
Output: name 'B' is not defined : B needs to be defined, please

위의 예외는 먼저 이름 오류 에서 노력하다 블록. 그런 다음 표준을 인쇄합니다. 이름 오류 예외가 먼저 발생합니다('이름 'B'가 정의되지 않았습니다'). 그리고 서면 예외('B가 정의되어야 합니다.')로 이를 지원합니다.

관련: 모든 프로그래머가 알아야 하는 기본 프로그래밍 원칙

Windows 10 인터넷 없음, 보안

그리고 일련의 예외를 처리하려면 다음을 수행할 수도 있습니다. 노력하다 많은 사람들과 차단 제외하고 진술. 이것은 매우 편리합니다. 노력하다 블록에는 많은 예외가 있을 가능성이 있습니다.

try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,':', 'B needs to be defined, please')
except ValueError as val:
print(val,':', 'You can't convert that data')
except ZeroDivisionError as zeroerr:
print(zeroerr,':', 'You can't divide a number by zero')
else:
print(u'Operation successfull! The results are: %s, %s, and %s'%(C, D, F))
Output: division by zero : You can't divide a number by zero

분할이 유효하면 어떻게 됩니까? 예를 들어, 교체 F = 7/0 위의 코드에서 F = 7/5 제공:

Output: Operation successfull! The results are: 7, 6.0, and 1.4

Python의 사용자 정의 예외

예외를 생각해내고 나중에 프로그램에서 호출할 수도 있습니다. 이를 통해 예외에 대한 특정 설명을 제공하고 원하는 대로 이름을 지정할 수 있습니다.

그럼에도 불구하고 모든 사용자 정의 예외(직접 또는 간접적)는 여전히 기본 제공 예외 파이썬 클래스.

아래 예제 코드는 기본을 참조합니다. 예외 전화로 직접 런타임 오류 그것에서:

class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError('Bad hostname')
except connectionError as err:
print(err.value)
Output: Bad hostname

참고 연결 오류 , 이 경우 는 사용자 정의 클래스로, 프로그램에서 필요할 때 언제든지 올릴 수 있습니다.

관련된: Python을 사용한 정규 표현식 초보자 안내서

에서 직접 파생하여 사용자 정의 예외를 만들 수 있습니다. 예외 기본 클래스. 그러나 아래 예외는 6에서 5를 빼는 것을 방지하고 기본 클래스에서 직접 예외를 호출합니다.

class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,'This substraction is not allowed')
except sixFiveError as e:
print('There was an error:', e.message)
Output: There was an error: This substraction is not allowed

실제로 다른 함수에서 호출하여 이전에 정의한 예외를 사용할 수 있습니다. 예를 들어 다음을 만들 수 있습니다. 부동 오류 두 개의 float만 추가할 수 있습니다.

# First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,'Numbers must be float to add')
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

이제 정의했기 때문에 부동 오류 클래스, Python은 다음을 사용하여 두 개의 부동 리터럴을 추가하려고 하면 addtwoFloat 기능.

당신은 인쇄할 수 있습니다 부동 오류 어떤 일이 일어나는지 보기 위해 생성한 동일한 Python 파일에서 클래스를 생성합니다.

print(FloatError)
Output:

부동 오류 그러나 내장 Python 예외는 아닙니다. 전화를 걸어 확인하실 수 있습니다. 부동 오류 이 클래스를 생성하지 않은 다른 새로운 Python 파일에서:

print(FloatError)
Output: NameError: name 'FloatError' is not defined

당신은 얻을 이름 오류 파이썬은 그것을 표준 예외로 인식하지 않기 때문입니다.

다른 오류 클래스를 자체 정의하여 어떻게 작동하는지 확인할 수도 있습니다.

예외를 사용하여 Python 프로그램을 더욱 사용자 친화적으로 만들기

파이썬에는 많은 표준 예외가 있습니다. 그러나 당신도 당신의 것을 정의할 수 있습니다. 그럼에도 불구하고 프로그램 사용의 용이성은 다양한 예외(사용자 정의, 비특정 또는 표준)를 처리하는 방법에 따라 어느 정도 달라집니다.

그러나 예외를 사용하면 사용자가 프로그램과 상호 작용할 때 프로그램이 작동하는 방식을 지정할 수 있습니다. 오류의 원인을 명확하고 간결하게 설명하면 사용자가 무엇을 잘못하고 있는지 알려주고 때로는 올바른 방향을 알려줍니다.

공유하다 공유하다 트위터 이메일 Python 코드를 디버그하는 방법

경로에 있는 모든 Python 버그를 스쿼시하는 노하우를 갖추십시오.

다음 읽기
관련 항목
  • 프로그램 작성
  • 파이썬
  • 코딩 튜토리얼
저자 소개 이디소 오미솔라(94건의 기사 게재)

Idowu는 스마트 기술과 생산성에 대한 열정을 가지고 있습니다. 여가 시간에는 코딩을 하고 지루할 때는 체스판으로 전환하지만 가끔은 일상에서 벗어나는 것도 좋아합니다. 사람들에게 현대 기술을 다루는 방법을 보여주고자 하는 그의 열정은 그가 더 많은 글을 쓰도록 동기를 부여합니다.

Idowu Omisola가 참여한 작품 더보기

뉴스레터 구독

뉴스레터에 가입하여 기술 팁, 리뷰, 무료 전자책 및 독점 거래를 확인하십시오!

구독하려면 여기를 클릭하세요.