python 언어 기초 --python에서 이상한 포획 및 처리 (try... except... finally)
우리의 일상적인 개발에서 이런저런 오류가 발생하는 것을 피하기 어렵다. 그러면 오류가 발생하면 포획 처리를 하지 않으면 프로그램이 종료되고 종료된다.만약에 수강생 정보 관리 시스템이 있다면 모든 수강생은 시스템에 기록해야 할 정보가 한 무더기 있다. 어떤 수강생의 정보는 이미 반은 기록되어 저장되지 않았는데 이때 프로그램에 오류가 발생하여 이상하게 퇴출되었다. 그러면 우리 앞의 일들은 헛수고가 아니겠는가.그래서 시스템이 작동할 수 있도록 이 이상을 포착하고 처리해야 한다.
그럼 뭐가 이상인가요?다음은 작은 예를 보겠습니다.
print('---test1---')
open('test.txt')#test.txt
print('---test2---')
상술한 코드를 실행하면 다음과 같은 결과를 얻는다
---test1---Traceback (most recent call last): File "C:/lyq/lyq.py", line 2, in open('test.txt') FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
우리는 첫 번째 테스트 1이 이미 인쇄된 것을 보았는데, 정상적인 상황에서는 테스트 2를 이어서 인쇄해야 하지만, 결과는 우리가 상상했던 것처럼 그렇게 되지 않았다.중간에 오류가 발생했기 때문에 프로그램이 존재하지 않는 파일을 열려고 시도할 때 프로그램에서 찾을 수 없는 이상을 던져 프로그램의 이상을 끝냅니다.
예외:
python 프로그램이 일부 오류를 만났을 때, 해석기는 계속 아래로 실행할 수 없고, 오류 알림이 발생하여 프로그램이 종료되는 것이 이른바 이상이다.
그러면 프로그램이 이상할 때 프로그램이 종료되지 않도록 우리는 어떻게 해야 합니까?다음은 이상한 포획을 살펴보자.
예외 캡처...except ...
python 언어에서try로...except...문장으로 이상을 포획하고 처리하다.try는 except나finally와 함께 사용해야 하며 단독으로 사용할 수 없습니다.일반적인 상황에서 오류가 발생하기 쉽거나 오류가 발생할 수 있는 코드를try문장에 놓고 오류를 처리하는 논리를except에 놓는다.try...except...try의 코드가 먼저 실행되고 오류가 발생하면 그 줄의 코드에서 멈추고 except 블록으로 넘어가 except의 코드를 실행합니다.이것이 이상한 포획이다.
예제 코드
try:
print('---test1---')
open('test.txt')#test.txt
print('---test2---')
except FileNotFoundError as e:
print('---test3---')
위 코드 실행 결과
---test1--- ---test3---
우리는 실행 결과가 테스트 1과 테스트 3을 출력한 것을 보았는데, 처음 실행한 것처럼 테스트 1만 출력하고 오류가 한 무더기 발생한 것이 아니다.이것이 바로 이상 처리의 장점이다.
다양한 예외 캡처
평상시 개발에서 여러 가지 유형의 이상을 만날 수 있다. 예를 들어 위에서 사용한 FileNotFoundError, 그리고 프로그램에서 정의되지 않은 변수를 사용했을 때 NameError의 이상을 던진다.서로 다른 유형의 이상에 대해 서로 다른 이상류를 사용하여 처리해야 한다.
try:
print('---test1---')
print(name)
open('test.txt')#test.txt
print('---test2---')
except FileNotFoundError:
print('---test3---')
위 코드 실행 결과:
---test1---Traceback (most recent call last): File "C:/lyq/lyq.py", line 3, in print(name) NameError: name 'name' is not defined
또 한 무더기의 오류가 발생했고, 게다가 아까와는 달라졌다. 왜 그런지, 나는try를 넣은 것이 아니다.except 처리했어?왜냐하면 처리할 때 번호를 맞추어 자리에 앉지 않았기 때문이다. 여기에 Name Error의 이상이 새로 생겼는데 우리 프로그램은 FileNot Found Error를 사용해서 처리했다. 분명히 포획하고 처리할 방법이 없다. 이럴 때 여러 개의 이상을 포획하고 처리해야 한다.위의 코드를 수정하고 NameError 처리를 추가합니다.
try:
print('---test1---')
print(name)
open('test.txt')#test.txt
print('---test2---')
except (FileNotFoundError,NameError):
print('---test3---')
이렇게 하면 코드가 다시 정상적으로 운행할 수 있다.다양한 이상을 포획하고 처리할 때 이상을 처리하는 여러 개의 이상류를 원조 형식으로 except 문장 뒤에 놓으면 된다.
그러나 이것도 문제가 있다. 그렇게 많은 이상을 우리는 모든 이상류가 일일이 대응할 수 없다는 것을 알 수 없다. 위에서 번호를 맞추어 자리에 앉아야 한다고 말했는데 그렇지 않으면try를 붙여도...except...꼭 잡을 수 있는 것도 아닌데 어떡하지?서두르지 마라.python은 이미 이런 것들을 생각했다. 이python은 우리에게 궁극적인 큰 종류의 Exception을 준비했다. 이 이상 종류는 거의 모든 종류의 이상을 포착할 수 있다.용법은 다른 것과 마찬가지로 여기서는 더 이상 말하지 않겠다.
try... except ... finally
이상을 처리할 때 키워드finally가 하나 더 있습니다.finally도 마찬가지로try나try와...except 코디 사용.위에서 말했듯이try에서 오류가 발생하면 프로그램은 잘못된 줄 코드에서 멈추고 except에서 except의 코드를 실행합니다.그러니까try에서 잘못된 줄 뒤에 있는 코드가 실행되지 않는다는 거야.이것은 가끔은 불합리한 경우도 있다. 예를 들어try에서 파일을 열고 조작을 한 후에 파일을 닫는다. 그러나 마침 파일을 조작하는 과정에서 이상이 생겨서 코드가 중단되어 파일을 닫을 수 없다. 이것은 사실 매우 불합리한 것이다.그러니까 이럴 때finall 키워드를 빌려야 돼.
finally의 역할은 프로그램이 이상을 겪었든 안 겪었든 간에try의 코드든 except의 코드든 마지막으로 finally에 들어가서 finally의 코드를 다시 실행해야 한다는 것이다.
프로그램에서, 만약 한 단락의 코드가 실행되어야 한다면, 이상이 발생하든 발생하든 실행해야 한다면,finally를 사용해야 한다.예를 들어 파일 닫기, 자물쇠 풀기, 데이터베이스 연결 반환 등
try:
print('---test1---')
print(name)
open('test.txt')#test.txt
print('---test2---')
except (FileNotFoundError,NameError):
print('---test3---')
finally:
print(' , ')
여기에 설명해야 할 것은try와finally를 조합해서 사용하면 except 키워드를 사용하지 않아도 된다. 예를 들어 가끔 이상을 포착하고 처리하고 싶지 않을 때 except를 생략할 수 있다.
try ... except ... else
여러분이
else
에 대해 낯설지 않으실 거라고 믿습니다.if에서 그 역할은 조건이 충족되지 않을 때 집행하는 것입니다.똑같이try에서...except...에서 마찬가지다. 즉, 이상이 포착되지 않으면else의 논리를 실행한다.try:
num = 100
print num
except NameError as errorMsg:
print(' :%s'%errorMsg)
else:
print(' , ')
이상에 대한 기본적인 소개와 간단한 포획과 처리입니다.python의 표준 이상 클래스에 대한 자세한 설명은 다른 글의python의 표준 이상 및 설명을 참고하십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 언어 기초 --python에서 이상한 포획 및 처리 (try... except... finally)우리는 첫 번째 테스트 1이 이미 인쇄된 것을 보았는데, 정상적인 상황에서는 테스트 2를 이어서 인쇄해야 하지만, 결과는 우리가 상상했던 것처럼 그렇게 되지 않았다.중간에 오류가 발생했기 때문에 프로그램이 존재하지 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.