>  기사  >  백엔드 개발  >  Python 예외 처리

Python 예외 처리

高洛峰
高洛峰원래의
2016-11-23 09:15:061035검색

Python은 Python 프로그램이 실행될 때 발생하는 예외와 오류를 처리하기 위해 두 가지 매우 중요한 기능을 제공합니다. 이 기능을 사용하여 Python 프로그램을 디버그할 수 있습니다.

예외 처리: 이 사이트의 Python 튜토리얼에서 자세히 소개합니다.

주장: 이 사이트의 Python 튜토리얼에서 자세히 소개합니다.

Python 표준 예외

예외 이름

설명

BaseException All 예외 기본 클래스

SystemExit 해석기 종료 요청

KeyboardInterrupt 사용자가 실행을 중단합니다(보통 ^C 입력)

일반 오류에 대한 예외 기본 클래스

StopIteration The iterator에는 더 이상 값이 없습니다. ​

GeneratorExit 생성기가 종료를 알리기 위해 예외를 생성합니다.

SystemExit Python 인터프리터가 종료를 요청합니다.

StandardError 모든 내장 표준 예외 기본 클래스

ArithmeticError 모든 수치 계산 오류에 대한 기본 클래스

FloatingPointError 부동 소수점 계산 오류

OverflowError 수치 연산이 최대 한도를 초과했습니다.

ZeroDivisionError Division ( 또는 모듈로) 0(모든 데이터 유형)

AssertionError 어설션 문 실패

AttributeError 개체에 이 속성이 없습니다.

EOFError 내장 입력이 없으며 EOF 표시에 도달했습니다.

EnvironmentError 운영 체제 오류에 대한 기본 클래스

IOError 입력/출력 작업 실패

OSError 운영 체제 오류

WindowsError 시스템 호출 실패

ImportError 가져오기 모듈/ 객체 실패

KeyboardInterrupt 사용자가 실행을 중단합니다(보통 ^C 입력)

LookupError 잘못된 데이터 쿼리에 대한 기본 클래스

IndexError 시퀀스에 해당 인덱스가 없습니다

KeyError 키가 맵에 존재하지 않습니다.

MemoryError 메모리 부족 오류(Python 인터프리터에는 치명적이지 않음)

NameError 선언되지 않은/초기화된 객체(속성 없음)

UnboundLocalError 초기화되지 않은 지역 변수에 액세스

ReferenceError 가비지 수집된 개체에 액세스하려는 약한 참조

RuntimeError 일반 런타임 오류

NotImplementedError 아직 구현되지 않음 메서드

SyntaxError Python 구문 오류

IndentationError 들여쓰기 오류

TabError 탭과 공백 혼합

SystemError 일반 인터프리터 시스템 오류

Typeerror의 잘못된 연산 유형

Valueerror 잘못된 매개변수 전달

UnicodeError 유니코드 오류

UnicodeCodeError 유니코드 디코딩 오류

uni> uni Codeencodeerror 유니코드 인코딩 error

UnicodeTranslateError 유니코드 변환 오류

Warning 경고에 대한 기본 클래스

DeprecationWarning 더 이상 사용되지 않는 기능에 대한 경고

FutureWarning 구문 정보 향후 의미가 변경될 것이라는 경고

OverflowWarning long(long)으로 자동 승격에 대한 이전 경고

PendingDeprecationWarning 기능이 더 이상 사용되지 않는다는 경고

RuntimeWarning 의심스러운 런타임 동작에 대한 경고

SyntaxWarning 경고 의심스러운 구문

사용자 코드로 인해 생성된 UserWarning 경고

예외란 무엇인가요?

예외란 프로그램 실행 중에 발생하여 프로그램의 정상적인 실행에 영향을 미치는 이벤트입니다.

일반적으로 Python이 프로그램을 정상적으로 처리할 수 없을 때 예외가 발생합니다.

예외는 오류를 나타내는 Python 객체입니다.

Python 스크립트에서 예외가 발생하면 이를 포착하고 처리해야 합니다. 그렇지 않으면 프로그램이 실행을 종료합니다.

예외 처리

예외를 포착하려면 try/exc 문을 사용할 수 있습니다.

try/Exception 문은 try 문 블록에서 오류를 감지하는 데 사용되므로, Except 문이 예외 정보를 캡처하고 처리할 수 있습니다.

예외 발생 시 프로그램을 종료하고 싶지 않다면 한번 시도해 보세요.

구문:

다음은 간단한 try의 구문입니다....제외...else:

시도해 보세요:

<문> # 'name' 예외가 발생하면 추가 데이터를 가져옵니다.

else:

🎜>

try는 try 문을 시작한 후 Python이 현재 프로그램의 컨텍스트에서 이를 표시하므로 예외가 발생하면 여기로 돌아올 수 있습니다.

try 이후 문이 실행될 때 예외가 발생하면 Python은 예외가 처리된 후 전체 try 문을 통과하여 try 및 첫 번째 Except 절을 실행합니다. (예외를 처리할 때 새로운 예외가 발생하지 않는 한)

try 이후 문에서 예외가 발생했지만 일치하는 Except 절이 없으면 해당 예외는 상위 try 또는 프로그램의 최상위 수준에 제출됩니다(이렇게 하면 프로그램이 종료되고 인쇄됩니다). 기본 오류 메시지).

try 절이 실행될 때 예외가 발생하지 않으면 파이썬은 else 문 다음에 문을 실행하고(else가 있는 경우) 제어 흐름은 전체 try 문을 통과합니다.

다음은 간단한 예입니다. 파일을 열고, 파일에 내용을 쓰고, 예외가 발생하지 않습니다.

#!/usr/bin/python

시도해 보세요:

fh = open("testfile", "w")

fh.write("이것은 예외 처리를 위한 테스트 파일입니다!!")

Except IOError:

print "오류: 파일을 찾거나 데이터를 읽을 수 없습니다."

else:

print "파일에 내용을 성공적으로 작성했습니다."

fh.close()

위 프로그램 출력 결과:

파일에 내용을 성공적으로 작성했습니다.

다음은 간단한 예입니다. 파일을 열고 파일에 내용을 쓰는데 파일에 쓰기 권한이 없어 예외가 발생했습니다.

#!/usr/bin/python

시도:

fh = open(" testfile ", "w")

fh.write("이것은 예외 처리를 위한 테스트 파일입니다!!")

out IOError:

print "Error: can ' 파일을 찾거나 데이터를 읽지 않음"

else:

print "파일에 내용을 성공적으로 기록했습니다."

위 프로그램의 출력 결과:

오류: 파일을 찾거나 데이터를 읽을 수 없습니다

예외 유형 없이 Except 사용

다음 예와 같이 예외 유형 없이 Except를 사용할 수 있습니다.

시도해 보세요:

여기서 작업을 수행하세요.

............. . ....

제외:

예외가 있으면 이 블록을 실행합니다.

............ ... .....

else:

예외가 없으면 이 블록을 실행합니다.

위에서 즉, try-Exception 문은 발생하는 모든 예외를 포착합니다. 하지만 이는 좋은 방법이 아니며, 이 프로그램을 통해서는 구체적인 비정상적인 정보를 식별할 수 없습니다. 모든 예외를 포착하기 때문입니다.

여러 예외 유형과 함께 Except 사용

아래 표시된 것처럼 동일한 Except 문을 사용하여 여러 예외 메시지를 처리할 수도 있습니다.

다음을 시도하세요.

여기에서 작업을 수행하세요.

.....

제외( Exception1[, Exception2[,...ExceptionN]]]):

주어진 예외 목록에 예외가 있으면

이 블록을 실행합니다

. .......................

else:

예외가 없으면 이 블록을 실행합니다.

try-finally 문

try-finally 문은 예외 발생 여부에 관계없이 마지막 코드를 실행합니다.

시도:

<문>

마지막으로:

<문> 종료 시 실행 try

raise

참고: Except 문이나 finally 문을 사용할 수 있지만 동시에 둘 다 사용할 수는 없습니다. else 문은 finally 문과 동시에 사용할 수 없습니다. >

try:

fh = open("testfile", "w")

fh.write(" 이것은 예외 처리를 위한 테스트 파일입니다!!")

마지막으로:

print "Error: can't find file or read data"

열면 파일에 쓰기 권한이 없으며 출력은 다음과 같습니다.

오류: 파일을 찾을 수 없거나 데이터를 읽을 수 없습니다

같은 예를 다음과 같이 작성할 수도 있습니다.

#!/usr/bin/python

시도:

fh = open("testfile", "w")

try:

fh.write(" 이것은 예외 처리를 위한 테스트 파일입니다!!")

finally:

print "Going to close 파일"

fh.close()

IOError 제외:

print "오류: 파일을 찾거나 데이터를 읽을 수 없습니다"

시도할 때 블록에 예외가 발생하고 finally 블록 코드가 즉시 실행됩니다.

finally 블록의 모든 문이 실행된 후 다시 예외가 발생하고 Except 블록 코드가 실행됩니다.

매개변수의 내용이 예외사항과 다릅니다.

예외 매개변수

예외에는 출력 예외 정보 매개변수로 사용할 수 있는 매개변수가 있을 수 있습니다.

아래 표시된 것처럼 Except 문을 통해 예외 매개변수를 캡처할 수 있습니다.

try:

작업을 수행합니다. 여기;

........................

ExceptionType 제외, 인수:

당신 여기서 Argument 값을 출력할 수 있습니다...

변수에서 받은 예외 값은 일반적으로 예외 문에 포함됩니다. 튜플 형태의 변수는 하나 이상의 값을 받을 수 있습니다.

튜플에는 일반적으로 잘못된 문자열, 잘못된 숫자, 잘못된 위치가 포함됩니다.

인스턴스

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

#!/usr/bin/python

# 여기서 함수를 정의하세요.

def temp_convert(var):

try:

return int(var)

Except ValueError, Argument:

print "The 인수에는 숫자n이 포함되어 있지 않습니다.", Argument

# 여기서 위 함수를 호출하세요.

temp_convert(" xyz");

위 프로그램 실행 결과는 다음과 같습니다.

인수에 숫자가 없습니다

기본이 10인 int()에 대한 잘못된 리터럴: 'xyz'

예외 발생

raise 문을 사용하여 스스로 예외를 발생시킬 수 있습니다

raise 구문 형식은 다음과 같습니다.

raise [Exception [ , args [, Traceback]]]

문의 예외 유형은 다음과 같습니다. 예외(예: NameError) 매개변수는 예외 매개변수 값입니다. 이 매개변수는 선택사항입니다. 제공되지 않은 경우 예외 매개변수는 "None"입니다.

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

인스턴스

예외는 문자열, 클래스 또는 개체일 수 있습니다. Python 커널에서 제공되는 대부분의 예외는 클래스 인스턴스의 매개변수인 인스턴스화된 클래스입니다.

예외 정의는 다음과 같이 매우 간단합니다.

def functionName(level):

if level < 1:

raise "Invalid level!", level

# 이에 대한 아래 코드는 실행되지 않습니다

# 예외가 발생하면

참고: 예외를 포착하려면 "제외" 문은 동일한 예외가 포함된 클래스 개체 또는 문자열을 발생시켜야 합니다.

예를 들어, 위의 예외를 포착하는 경우 "제외" 문은 다음과 같습니다.

try:

비즈니스 로직은 여기에서 ..

"잘못된 레벨!" 제외:

예외 처리는 여기서...

else:

나머지 코드는 여기서...

사용자 정의 예외

프로그램은 새 예외 클래스를 생성하여 자체 예외 이름을 지정할 수 있습니다. 예외는 일반적으로 Exception 클래스에서 직접 또는 간접적으로 상속되어야 합니다.

다음은 RuntimeError와 관련된 예제입니다. 예제에는 예외가 발생했을 때 자세한 정보를 출력하는 데 사용되는 기본 클래스인 RuntimeError가 생성됩니다.

try 문 블록에서는 사용자 정의 예외 이후에 Except 블록 문이 실행됩니다. 변수 e는 Networkerror 클래스의 인스턴스를 만드는 데 사용됩니다.

class Networkerror(RuntimeError):

def __init__(self, arg):

self.args = arg

위 클래스를 정의한 후 다음과 같이 예외를 트리거할 수 있습니다.

시도해 보세요:

네트워크 오류("잘못된 호스트 이름")를 올리세요

Networkerror 제외,e:

e.args 인쇄


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.