0기초학습Python(19)[대상을 대상으로 개발하는 과정에서의 이상(이상 포획~관련)]
12669 단어 0 기초 학습 Python
대상을 대상으로 개발하는 과정 중 =>이상
이상
프로그램이 실행되는 과정에서 일부 오류가 발생하거나 문법 논리에 문제가 발생하면 해석기는 이 때 정상적으로 실행할 수 없고 오히려 잘못된 알림이 발생한다. 이것이 바로 이상(오류 코드나 BUG)이다.
프로그램에 이상한 결과가 나타나다
프로그램 실행 중 예외가 발생했습니다.
가벼운 기능이 실행되지 않거나 기능 실행 결과 오류
다시 전체 프로그램 붕괴!!!!
이상을 포착하다
이상을 포획하는 것은 프로그래밍에서 자주 사용하는 처리 코드에서 빈틈이 생길 수 있는 일부 기초 해결 방안이다
이상 포획 방법
try - except 구문 사용
try:
#
except:
# try
· 이런 포획 이상은 문제가 하나 있습니다. 이상을 포획하고 except의 처리 코드만 실행하지만 이상 문제를 알 수 없습니다.
지정 예외 캡처
예:
print(a)
#
#SyntaxError: invalid character in identifier
# “:” ,
구문
try:
#
except :
#
지정한 이상을 포획할 때 발생할 수 있는 모든 이상 유형을 반드시 고려해야 한다. 만약에 발생할 수 있는 이상이 쓴'발생할 수 있는 이상 클래스'에 없으면 오류가 발생할 수 있다.
주의
이상을 포획할 때 포획할 이상 유형의 이름을 except에 놓고 원조의 방식으로 구현하거나 여러 except를 사용한 다음에 서로 다른 이상 유형의 이름을 올릴 수 있다
이상 클래스
이상 클래스는 Python에 내장된 일부 클래스를 가리키는데, 이러한 클래스는 Python의 일부 이상 문제를 대표한다
예외 이름
묘사
BaseException
모든 이상한 기본 클래스
SystemExit
해석기 종료 요청
KeyboardInterrupt
사용자 실행 중단 (보통 입력 ^C)
Exception
일반 오류의 기본 클래스
StopIteration
교체기에 더 많은 값이 없습니다
GeneratorExit
생성기(generator)에 이상이 발생하여 종료를 알립니다
SystemExit
Python 해석기 종료 요청
StandardError
모든 내장 표준 이상 기류
ArithmeticError
모든 수치 계산 오류의 기본 클래스
FloatingPointError
부동 소수점 계산 오류
OverflowError
수치 연산이 최대 제한을 초과하다
ZeroDivisionError
제로(또는 콜아웃) 제로(모든 데이터 유형)
AssertionError
선언문 실패
AttributeError
대상에 이 속성이 없습니다
EOFError
내장 입력 없음, EOF 태그에 도달
EnvironmentError
운영 체제 오류의 기본 클래스
IOError
입출력 작업 실패
OSError
운영 체제 오류
WindowsError
시스템 호출 실패
ImportError
모듈/개체 가져오기 실패
KeyboardInterrupt
사용자 실행 중단 (보통 입력 ^C)
LookupError
잘못된 데이터 조회의 기본 클래스
IndexError
시퀀스에 이 인덱스가 없습니다 (index)
KeyError
맵에 이 키가 없습니다
MemoryError
메모리 오버플로우 오류 (Python 해석기에 치명적이지 않음)
NameError
선언되거나 초기화되지 않은 객체(속성 없음)
UnboundLocalError
초기화되지 않은 로컬 변수 액세스
ReferenceError
스팸이 수거된 객체에 대한 약한 참조(Weak reference)
RuntimeError
일반 런타임 오류
NotImplementedError
실현되지 않은 방법
SyntaxError
파이썬 구문 오류
IndentationError
들여쓰기 오류
TabError
탭과 공백 혼용
SystemError
일반 해석기 시스템 오류
TypeError
잘못된 유형 작업
ValueError
잘못된 매개 변수 입력
UnicodeError
유니코드 관련 오류
UnicodeDecodeError
유니코드 디코딩 오류
UnicodeEncodeError
유니코드 인코딩 오류
UnicodeTranslateError
유니코드 변환 오류
Warning
경고의 기본 클래스
DeprecationWarning
버려진 피쳐에 대한 경고
FutureWarning
장래의 의미를 구성하는 데 있어서 변화가 있을 것이라는 경고
OverflowWarning
롱 보정(long)으로 자동 승격에 대한 이전 경고
PendingDeprecationWarning
특성이 폐기될 것이라는 경고
RuntimeWarning
의심스러운 런타임 비헤이비어(runtime behavior) 경고
SyntaxWarning
의문의 문법 경고
UserWarning
사용자 코드 생성 경고
예외 설명 정보 캡처
구문
try:
#
except ( 1, 2,...) as :
print( )
포획된 영역의 코드에 나타나는 지정한 이상 문제에 대한 설명 정보를 변수에 저장하고 출력합니다
모든 예외 캡처
모든 예외 클래스의 상위 클래스는 Exception 클래스입니다.
구문
try:
#
except Exception as :
print( )
이상한 else
else는 이상이 잡히지 않으면 실행해야 하는 코드를 표시합니다
구문
try:
#
except ( 1, 2)as :
#
print( )
else:
#
비정상적인finnally
finnally는 최종 결과를 표시합니다. 코드가 이상을 포착했든 안 했든 (try의 코드가 실행된 후에 except에 들어갔든 else에 들어갔든) 최종적으로finnally에 들어갔습니다.
구문
try:
#
except ( 1, 2)as :
#
print( )
else:
#
finnally:
# bug
이상 전달
비정상적인 중첩으로 이해할 수 있습니다.
# 1+100
import time
#
def fun():
try:
res = 0
print("1"+2)
print(time.time())
# 0.0168831
try:
for i in range(1, 101):
res += i
print(res)
time
time.sleep(2)
except:
print(" 1")
except:
print(" 2")
finally:
print(time.time())
# 0.0178795
return res
print( fun())
사용자 정의 예외
python에서 일반적으로 던지는 이상 문법은 이상 클래스 대상입니다. 이 이상 클래스 대상은 Python에서 미리 봉인된 것입니다
구문
try:
raise
# , except
except Exception as res:
#
else:
#
finnally:
# bug
수요: 나이가 0보다 적으면 안 되는 데이터 검출(0보다 적으면 이상 투하)
class AgeInputError(Exception):
def __init__(self, age):
self.age = age
self.minage = 0
def __str__(self):
return f" {self.age}, {self.minage}"
def main():
try:
age = int(input(" :"))
if age < 0:
# raise
raise AgeInputError(age)
except Exception as res:
print(res)
else:
print(" ")
finally:
print(" ")
main()
참고:
python의raise 키워드는 이상을 일으키는 데 사용되며, 기본적으로 C#나 자바의throw 키워드와 같습니다
Day19-------END