Python 이상 처리 실례 상세 설명
많은 대상 언어 와 마찬가지 로 Python 은 이상 처 리 를 가지 고 있 으 며 try...except 블록 을 사용 하여 이 루어 집 니 다.
참고:Python v s.자바 의 이상 처리
Python 은 try...except 를 사용 하여 이상 을 처리 하고 raise 를 사용 하여 이상 을 일 으 킵 니 다.자바 와 C++는 try...catch 를 사용 하여 이상 을 처리 하고 throw 를 사용 하여 이상 을 일 으 킵 니 다.
이상 하 게 Python 에 없 는 곳 이 없습니다.실제로 표준 파 이 썬 라 이브 러 리 의 모든 모듈 은 그것들 을 사 용 했 고 파 이 썬 은 여러 가지 상황 에서 그것들 을 일 으 킬 것 이다.책 전체 에서 너 는 이미 그것들 을 거듭 보 았 다.
•존재 하지 않 는 사전 키 사용 키 오류 이상 을 유발 합 니 다.
•검색 목록 에 존재 하지 않 는 값 ValueError 이상 을 유발 합 니 다.
•존재 하지 않 는 방법 호출 AttributeError 이상 을 일 으 킬 수 있 습 니 다.
•존재 하지 않 는 변 수 를 참조 NameError 이상 을 유발 합 니 다.
•강제 변환 없 이 데이터 형식 혼용 TypeError 이상 을 일 으 킬 수 있 습 니 다.
이러한 상황 에서 우 리 는 Python IDE 를 간단하게 사용 하고 있 습 니 다.오류 가 발생 했 습 니 다.이상 이 인쇄 되 었 습 니 다.(IDE 에 따라 의도 적 으로 눈 부신 빨간색 으로 표 시 될 수 있 습 니 다)이것 이 바로.미 처리 이상 이 라 고 합 니 다.이상 이 발생 했 을 때 코드 가 명확 하 게 관심 을 가지 고 처리 하지 않 았 기 때문에 Python 에 설 치 된 부족 한 처리 에 이상 이 전 달 됩 니 다.디 버 깅 정 보 를 출력 하고 실행 을 중지 합 니 다.IDE 에 서 는 큰 일이 아니 지만 실제 Python 프로그램 이 실 행 될 때 전체 프로그램 이 종 료 됩 니 다.
그러나 이상 이 프로그램의 완전 붕 괴 를 일 으 킬 수 있 는 것 은 아니다.이상 이 발생 하면 처 리 될 수 있다.가끔 이상 한 것 은 코드 에 있 는 bug(예 를 들 어 존재 하지 않 는 변 수 를 사용 하 는 것)때 문 입 니 다.그러나 많은 경우 에 이상 한 것 은 예견 할 수 있 습 니 다.파일 을 열 면 존재 하지 않 을 수도 있 습 니 다.데이터 베 이 스 를 연결 하면 연결 할 수 없 거나 접근 에 필요 한 정확 한 보안 인증서 가 없 을 수 있 습 니 다.코드 가 이상 을 일 으 킬 수 있다 는 것 을 알 면 try..except 블록 을 사용 하여 이상 을 처리 해 야 합 니 다.
1.존재 하지 않 는 파일 열기
>>> fsock = open("/notthere", "r") (1)
Traceback (innermost last):
File "<interactive input>", line 1, in ?
IOError: [Errno 2] No such file or directory: '/notthere'
>>> try:
... fsock = open("/notthere") (2)
... except IOError: (3)
... print "The file does not exist, exiting gracefully"
... print "This line will always print" (4)
The file does not exist, exiting gracefully
This line will always print
(1) 내 장 된 open 함 수 를 사용 하면 파일 을 열 어 읽 을 수 있 습 니 다.(다음 절 에 open 에 관 한 더 많은 내용 이 있 습 니 다)그러나 그 파일 이 존재 하지 않 아 IOError 이상 을 일 으 켰 다.IOError 이상 에 대한 명시 적 인 검 사 를 제공 하지 않 았 기 때문에 Python 은 무슨 일이 일 어 났 는 지 에 대한 디 버 깅 정 보 를 출력 한 다음 에 종료 합 니 다.(2) 같은 존재 하지 않 는 파일 을 열 려 고 했 지만,이번 에는 try...except 에서 실행 합 니 다.
(3) 오픈 방법 이 IOError 이상 을 일 으 켰 을 때,우 리 는 이미 그것 을 처리 할 준비 가 되 어 있 었 다.except IOError:줄 이 이상 을 포착 하고 우리 자신의 코드 블록 을 실행 합 니 다.이 코드 블록 은 이 예 에서 더 즐 거 운 오류 정 보 를 출력 할 뿐 입 니 다.
(4) 이상 하 게 처리 되면,처 리 는 보통 try...except 블록 이후 의 첫 줄 에서 계속 진행 된다.이 줄 은 이상 이 발생 하 든 안 발생 하 든 항상 인쇄 될 것 입 니 다.루트 디 렉 터 리 에 notthere 라 는 파일 이 있다 면 open 호출 에 성공 할 것 입 니 다.except 자 구 는 무시 되 고 마지막 줄 은 실 행 될 것 입 니 다.
이상 하 게 보일 수 있 습 니 다.(이상 을 포착 하지 않 으 면 프로그램 전체 가 무 너 질 것 입 니 다.)하지만 다른 방법 을 생각해 보 세 요.설마 존재 하지 않 는 파일 을 가리 키 는 대상 을 원 하 는 건 아니 겠 지?어쨌든 당신 은 그것 의 유효성 을 검사 해 야 합 니 다.그리고 만약 당신 이 잊 어 버 리 면 프로그램 은 아래 어 딘 가 에서 이상 한 오 류 를 할 것 입 니 다.그러면 원본 프로그램 으로 거 슬러 올 라 갈 수 밖 에 없습니다.나 는 네가 이런 일 을 한 적 이 있다 고 확신한다.이것 은 결코 재 미 있 지 않다.이상 을 사용 하면 오류 가 발생 하면 문제 의 근원 에서 표준적 인 방법 으로 그것들 을 처리 할 수 있다.
2.다른 용도 로 이상 사용
실제 적 인 오류 조건 을 처리 하 는 것 외 에 이상 에 도 많은 다른 용도 가 있다.표준 Python 라 이브 러 리 에서 일반적인 용법 은 모듈 을 가 져 와 서 사용 할 수 있 는 지 확인 하 는 것 입 니 다.존재 하지 않 는 모듈 을 가 져 오 면 ImportError 이상 이 발생 합 니 다.이러한 방법 으로 다단 계 기능 DD 가 실 행 될 때 어떤 모듈 이 효과 적 인지 정의 하거나 다양한 플랫폼 을 지원 할 수 있 습 니 다(즉,플랫폼 의 특정 코드 가 서로 다른 모듈 로 분리 되 는 것).내 장 된 Exception 클래스 에서 계승 하 는 클래스 를 만 들 고 자신의 이상 을 정의 한 다음 raise 명령 을 사용 하여 이상 을 일 으 킬 수 있 습 니 다.만약 당신 이 이것 에 관심 이 있다 면,더 읽 은 부분 을 보 세 요.
다음 예 는 특정 플랫폼 기능 을 이상 하 게 지원 하 는 방법 을 보 여 준다.코드 는 getpass 모듈 에서 왔 습 니 다.사용자 로부터 암 호 를 받 은 패 키 징 모듈 입 니 다.유 닉 스,윈도,맥 OS 플랫폼 에서 구령 을 받 는 것 은 다 르 지만 이 코드 는 모든 차이 점 을 봉인 했다.
# Bind the name getpass to the appropriate function
try:
import termios, TERMIOS (1)
except ImportError:
try:
import msvcrt (2)
except ImportError:
try:
from EasyDialogs import AskPassword (3)
except ImportError:
getpass = default_getpass (4)
else: (5)
getpass = AskPassword
else:
getpass = win_getpass
else:
getpass = unix_getpass
(1) termios 는 UNIX 만 의 모듈 로 입력 단말기 에 대한 바 텀 제 어 를 제공 합 니 다.이 모듈 이 잘못 되 었 거나(시스템 에 없 거나 시스템 이 지원 하지 않 기 때문에)가 져 오 는 데 실 패 했 습 니 다.Python 은 우리 가 캡 처 한 ImportError 이상 을 일 으 켰 습 니 다.(2) OK,termios 가 없 기 때문에 msvcrt 를 시도 해 보 겠 습 니 다.이것 은 Windows 만 의 모듈 입 니 다.Microsoft Visual C++실행 서비스 에서 유용 한 함 수 를 제공 할 수 있 는 API 입 니 다.가 져 오 는 데 실패 하면 Python 은 우리 가 캡 처 한 ImportError 이상 을 일 으 킬 수 있 습 니 다.
(3) 앞의 두 개가 작 동 하지 않 으 면 Easy Dialogs 에서 함 수 를 가 져 오 려 고 합 니 다.Mac OS 만 의 모듈 로 다양한 종류의 팝 업 대화 상 자 를 제공 합 니 다.다시 한 번 가 져 오 는 데 실패 하면 Python 은 우리 가 캡 처 한 ImportError 이상 을 일 으 킬 수 있 습 니 다.
(4) 이 플랫폼 의 특정한 모듈 은 하나 도 유효 하지 않 습 니 다.우리 가 여기 서 하 는 일 에 주의 하 세 요:우 리 는 함수 defaultgetpass 는 변수 getpass 에 부여 합 니 다.공식 getpass 문 서 를 읽 으 면 getpass 모듈 에서 getpass 함 수 를 정의 하 는 것 을 알려 줍 니 다.이것 은 이렇게 합 니 다.getpass 를 정확 한 함수 로 연결 하여 플랫폼 에 적응 합 니 다.그리고 getpass 함 수 를 호출 할 때 플랫폼 의 특정한 함 수 를 호출 했 습 니 다.이 코드 는 이미 설정 되 어 있 습 니 다.코드 가 어떤 플랫폼 에서 실행 되 고 있 는 지 알 거나 관심 을 가 질 필요 가 없습니다.getpass 만 호출 하면 항상 정확하게 처리 할 수 있 습 니 다.
(5) 하나의 try...except 블록 은 if 문장 처럼 else 자구 가 있 을 수 있 습 니 다.try 블록 에 이상 이 없 으 면 else 자구 가 실 행 됩 니 다.이 예 에 서 는 from Easy Dialogs import AskPassword 가 져 오 면 작업 이 가능 하 므 로 getpass 를 AskPassword 함수 에 연결 해 야 합 니 다.다른 모든 try...except 블록 은 비슷 한 else 자 구 를 가지 고 있 습 니 다.import 가 사용 가능 한 것 을 발견 하면 getpass 를 적당 한 함수 로 연결 합 니 다.
궁금 한 점 이 있 으 시 면 메 시 지 를 남기 거나 본 사이트 의 커 뮤 니 티 에 가서 토론 을 교류 하 세 요.읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.