새소식

반응형
Programming Language/Python

[Python] 파이썬 에러 종류 10가지

  • -
반응형

파이썬 로고 이미지입니다.
Python

 

 

파이썬뿐만 아니라 다른 언어로도 프로그래밍을 하면서 많은 오류에 직면한다고 생각한다. 이러한 오류는 간단한 문제는 금방 찾아 해결하지만 어디서 발생했는지 조차 추적 하기 힘든 오류는 짧게는 몇시간 길게는 몇일까지 필자는 걸렸던 경험이 있기 때문에 파이썬을 공부하면서 파이썬에서 흔히 발생하는 대표 오류 10가지에 대해 정리해보는 시간을 가져보았다.

파이썬 에러 종류 10가지


1. 구문 에러(Syntax Error)

파이썬에서 구문 에러(Syntax Error)는 코드를 파싱(구문 분석)하는 동안 발생하는 오류로, 코드의 문법적인 문제로 인해 발생한다. 구문 에러는 파이썬 코드를 실행하기 전에 발생하며, 일반적으로 코드 블록, 식별자, 연산자, 괄호, 콜론, 들여 쓰기 등의 문법 규칙을 따르지 않을 때 발생한다. 구문 에러가 발생하면 파이썬 인터프리터는 오류 메시지와 함께 어디서 문제가 발생했는지 보고해 준다. 이 오류 메시지는 문제의 줄 번호와 오류 메시지를 포함하고 있어서 디버깅에 유용하다.

 

괄호 또는 따옴표를 닫지 않은 경우

print("Hello, World'

 

콜론을 빼먹은 경우

if x > 5 print("x is greater than 5")

 

들여 쓰기 오류

if x > 5: print("x is greater than 5")

 

오탈자

pritn("Hello, World")

 

구문 에러를 해결하려면 오류 메시지를 확인하고 오류가 발생한 줄과 해당 줄의 주변 코드를 검토하여 문제를 찾아 수정해야 한다. 파이썬은 대부분의 구문 에러를 정확하게 식별하고 오류 메시지를 통해 원인을 알려준다.

 

 

2. 이름 오류(Name Error)

파이썬에서 이름 오류(Name Error)는 정의되지 않은 변수나 함수를 사용하려고 할 때 발생하는 오류이다. 이 오류는 코드에서 사용된 식별자(변수명, 함수명 등)가 현재 범위에서 정의되지 않았을 때 나타난다.

 

예를 들어, 다음과 같은 경우에 이름 오류(Name Error)가 발생할 수 있다.

 

변수를 정의하지 않고 사용하는 경우

print(x)  # x 변수가 정의되지 않았음

 

함수를 정의하지 않고 호출하는 경우

result = add(3, 5)  # add 함수가 정의되지 않았음

 

모듈을 가져와서 모듈 내의 정의되지 않은 변수 또는 함수를 사용하는 경우

import math
print(math.pi)  # math 모듈에 정의되지 않은 pi를 사용하려 함

 

이러한 경우에 파이썬은 이름 오류(Name Error)를 발생시키고 해당 오류 메시지를 표시한다. 오류 메시지는 어떤 이름이 정의되지 않았는지와 해당 오류가 발생한 줄 번호가 포함되어 있어서 디버깅에 도움이 된다. 

 

이름 오류를 해결하려면 해당 이름(변수 또는 함수)이 정의되어 있는지 확인하고, 정의되지 않은 이름을 정의하거나 올바른 이름을 사용하면 된다.

 

 

3. 타입 에러(Type Error)

파이썬에서 타입 오류(Type Error)는 데이터 유형(데이터 타입)이 올바르지 않을 때 발생하는 오류이다. 즉, 특정 연산이나 함수 호출이 예상한 데이터 타입과 호환되지 않는 경우에 발생한다. 일반적으로 다음과 같은 상황에서 타입 오류가 발생할 수 있다.

 

두 가지 다른 데이터 타입 간의 연산

result = "Hello, " + 42  # 문자열과 숫자의 연산은 타입 오류 발생

 

데이터 타입이 맞지 않는 함수 호출

result = len(42)  # 숫자에 대해 len() 함수를 호출하면 타입 오류 발생

 

부적절한 데이터 타입의 인자 전달

def add(a, b):
    return a + b

result = add("3", 5)  # 문자열과 숫자를 더하면 타입 오류 발생

 

다른 데이터 타입을 요구하는 메서드 호출

my_list = [1, 2, 3]
result = my_list.append("4")  # append() 메서드는 숫자 대신 문자열을 추가하면 타입 오류 발생

 

타입 오류를 해결하려면 해당 연산, 함수 호출 또는 메서드 호출이 예상한 데이터 타입과 호환되도록 데이터를 변환하거나, 데이터를 올바른 형식으로 사용해야 한다. 이를 통해 타입 오류를 방지하고 코드의 안정성을 유지할 수 있다.

 

 

4. 인덱스 오류(Index Error)

파이썬에서 인덱스 오류(Index Error)는 시퀀스(예 : 리스트, 튜플, 문자열) 요소에 접근할 때 인덱스가 유효하지 않은 경우에 발생하는 오류이다. 이 오류는 일반적으로 다음과 같은 상황에서 발생한다.

 

존재하지 않는 인덱스에 접근하는 경우

my_list = [1, 2, 3]
print(my_list[3])  # 리스트의 길이를 넘어가는 인덱스에 접근하면 인덱스 오류 발생

 

빈 시퀀스에서 인덱스 접근

empty_list = []
print(empty_list[0])  # 빈 리스트에서 인덱스 0에 접근하면 인덱스 오류 발생

 

음수 인덱스를 사용하는 경우(일부 시퀀스에서만 허용됨)

my_string = "Hello"
print(my_string[-6])  # 문자열의 범위를 벗어나는 음수 인덱스에 접근하면 인덱스 오류 발생

 

슬라이스 범위를 넘어가는 경우

my_list = [1, 2, 3, 4, 5]
print(my_list[2:7])  # 슬라이스 범위를 넘어가면 인덱스 오류 발생

 

인덱스 오류를 방지하려면 인덱스를 사용하기 전에 유효성을 확인하거나, 시퀀스의 길이와 범위를 고려하여 인덱스를 사용해야 한다. 이를 통해 코드가 더 안정적이고 예외 상황을 처리하기 쉬운 코드가 될 수 있다.

 

 

5. 키 에러(Key Error)

파이썬에서 키 오류(Key Error)는 딕셔너리에서 존재하지 않는 키(키가 없는 경우)로 요소에 접근하려고 할 때 발생하는 오류이다. 딕셔너리는 키와 값의 쌍을 저장하는 자료 구조이며, 딕셔너리에서 특정 키로 값을 가져올 때 그 키가 딕셔너리 안에 존재하지 않는 경우 키 오류가 발생한다.

 

예제 코드 1

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
print(my_dict["date"])  # "date"라는 키가 딕셔너리에 없기 때문에 키 오류 발생

 

키 오류를 방지하려면 키가 존재하는지 먼저 확인하고 나서 요소에 접근해야 한다. in 연산자나 get() 메서드를 사용하여 키의 존재를 확인할 수 있다.

 

예제 코드 2

if "date" in my_dict:
    value = my_dict["date"]
else:
    value = "Key not found"

 

또는 get() 메서드를 사용하여 키가 존재하지 않을 때 기본 값을 제공할 수도 있다.

 

예제 코드 3

value = my_dict.get("date", "Key not found")

이렇게 하면 키가 존재하지 않을 때 예외를 방지하고 대신 기본 값을 사용할 수 있다.

 

 

6. 분할 에러(ZeroDivisionError)

분할 에러(ZeroDivisionError)는 파이썬에서 숫자를 0으로 나누려고 할 때 발생하는 오류다. 0으로 나누는 연산은 수학적으로 정의되지 않으며, 파이썬에서 이러한 연산을 시도하면 예외가 발생한다.

 

예제 코드 1

result = 5 / 0  # 0으로 나누려고 하면 ZeroDivisionError가 발생

 

ZeroDivisionError를 처리하려면 예외 처리를 사용해야 한다. 예외 처리를 통해 코드가 오류를 발생시키지 않고 오류 상황을 처리할 수 있다.

 

예제 코드 2

try:
    result = 5 / 0
except ZeroDivisionError as e:
    print("0으로 나눌 수 없습니다. 오류 메시지:", e)

try 블록 안에서 0으로 나누려고 시도하고, ZeroDivisionError 예외가 발생하면 except 블록으로 이동하여 오류 메시지를 출력한다. 

 

ZeroDivisionError를 방지하려면 나누기 전에 0으로 나누는 경우를 확인하고, 필요한 경우에 나누기를 시도하기 전에 조건문을 사용하여 0으로 나눈 것을 방지할 수 있다. 이를 통해 코드의 안정성을 높일 수 있다.

 

 

7. 값 오류(Value Error)

값 오류(Value Error)는 파이썬에서 데이터 타입은 올바르지만 값 자체가 적절하지 않은 경우 발생하는 오류이다. 이 오류는 주로 내장 함수나 메서드에 부적절한 값이 전달되었을 때 발생하며, 해당 함수 또는 메서드에서 예상한 형식이나 범위를 벗어나는 값이 입력으로 제공될 때 발생한다.

 

예제 코드 1

value = int("abc")  # "abc"는 정수로 변환할 수 없는 문자열이므로 ValueError 발생

일반적인 예시 중 하나는 int() 함수에 변환할 수 없는 문자열을 전달하는 경우이다.

 

예제 코드 2

value = int("1010", 2)  # 이진수로 변환될 수 있는 문자열이어야 함, 그렇지 않으면 ValueError 발생

int() 함수에 부적절한 진법을 사용한 문자열을 전달하는 경우도 있다.

 

ValueError를 처리하려면 예외 처리를 사용하여 예외가 발생할 수 있는 부분을 둘러싸면 된다. 다음은 ValueError를 처리하는 간단한 방법이다.

 

예제 코드 3

try:
    value = int("abc")
except ValueError as e:
    print("값 오류 발생:", e)

이렇게 하면 코드가 예외를 처리하고 해당 예외 메시지를 출력한다. 값 오류를 방지하려면 함수나 메서드의 인자를 사용하기 전에 올바른 형식과 범위를 가진 값을 확인하거나, 예외 처리를 사용하여 오류를 처리할 수 있다.

 

 

8. 파일 열기 오류(File Open Error)

파일 열기 오류(File Open Error)는 파이썬에서 파일을 열려고 할 때 발생할 수 있는 오류이다. 이 오류는 파일이 존재하지 않거나 접근 권한이 없는 등의 이유로 파일을 열 수 없을 때 발생한다. 파이썬에서 파일 열기 오류를 처리하려면 try 및 except 문을 사용하여 예외 처리를 수행해야 한다. 예를 들어, 파일을 열려는 코드 블록을 try 블록 내에 넣고, 파일  열기 시도 시 except 블록에서 예외를 처리할 수 있다. 일반적으로 FiileNotFoundError 예외를 처리하거나 보다 일반적인 OSError 예외를 처리할 수 있다.

 

예제 코드

try:
    with open("non_existent_file.txt", "r") as file:
        content = file.read()
except FileNotFoundError as e:
    print("파일을 찾을 수 없습니다:", e)
except OSError as e:
    print("파일을 열 수 없습니다:", e)

non_existent_file.txt 파일을 열려고 시도하고, 만약 파일이 존재하지 않거나 열 수 없는 경우 해당 예외를 처리하고 오류 메시지를 출력한다. 파일 열기 오류를 처리하는 방법은 파일 시스템 작업을 수행하는 코드에서 중요하다. 파일을 열기 전에 파일이 존재하는지 확인하고, 파일에 대한 접근 권한이 있는지 확인하여 파일 열기 오류를 방지할 수 있다.

 

 

9. 임포트 오류(Import Error)

임포트 오류(Import Error)는 파이썬에서 모듈을 가져오려고 할 때 발생하는 오류이다. 모듈을 가져오는 과정에서 모듈이 존재하지 않거나 불러오는 모듈 내에서 다른 모듈을 찾을 수 없을 때 이 오류가 발생한다. 일반적으로 다음과 같은 경우에 임포트 오류가 발생할 수 있다.

 

모듈이 존재하지 않는 경우

import non_existent_module  # 존재하지 않는 모듈을 임포트하면 Import Error 발생

 

모듈 내에서 다른 모듈을 찾을 수 없는 경우

from my_module import non_existent_function  # 모듈 내에서 존재하지 않는 함수를 임포트하려 하면 Import Error 발생

 

모듈 이름이 올바르지 않은 경우

import 123module  # 모듈 이름이 올바르지 않으면 Import Error 발생

 

임포트 오류를 처리하려면 예외 처리를 사용하여 해당 모듈을 임포트 하려 시도하고, 모듈이 존재하지 않을 경우 예외를 처리할 수 있다. 또한 모듈의 이름을 올바르게 지정하고 모듈 내에서 찾으려는 함수 또는 변수도 올바르게 지정해야 한다.

 

예제 코드

try:
    import non_existent_module
except ImportError as e:
    print("모듈을 찾을 수 없습니다:", e)

이렇게 하면 모듈을 임포트 하려 시도하고, 모듈이 존재하지 않는 경우 예외가 처리되고 오류 메시지가 출력된다. ImportError를 방지하려면 모듈 이름을 올바르게 지정하고 필요한 모듈이 시스템에 설치되어 있는지 확인해야 한다.

 

 

10. 인덴트 에러(Indentation Error)

인덴트 에러(Indentation Error)는 파이썬에서 들여 쓰기(인덴트)의 형식 또는 정렬이 잘못된 경우 발생하는 오류이다. 파이썬은 들여 쓰기를 통해 코드 블록의 범위를 결정하므로 올바른 들여 쓰기가 중요하다. 인덴트 에러는 주로 다음과 같은 상황에서 발생한다.

 

들여 쓰기가 일관되지 않는 경우

if x > 5:
print("x is greater than 5")  # 들여쓰기 에러: if 블록 내용이 들여쓰기되지 않음

 

탭 문자와 공백 문자가 혼용된 경우

if x > 5:
    print("x is greater than 5")
    if y > 10:
    print("y is greater than 10")  # 들여쓰기 에러: 탭과 공백 문자가 혼용됨

 

코드 블록 내에서 일관된 들여 쓰기를 사용하지 않는 경우

if x > 5:
    print("x is greater than 5")
     print("This is incorrect indentation")  # 들여쓰기 에러: 일관성 없는 들여쓰기

인덴트 에러를 해결하려면 코드 블록의 들여 쓰기를 일관되게 설정해야 한다. 파이썬에서는 주로 공백 문자 4개를 들여 쓰기에 사용하는 것이 권장된다. 에디터 또는 통합 개발 환경(IDE)에서 자동 들여 쓰기를 사용하면 이러한 문제를 방지할 수 있다. 인덴트 에러를 해결하는 방법은 코드를 검토하여 들여 쓰기 오류를 찾고, 일관성 있고 정확한 들여 쓰기를 적용하는 것이다. 이를 통해 코드를 읽기 쉽게 유지하고 파이썬에서 예상대로 작동하도록 할 수 있다.

 

 

 

지금까지의 예제에서 이해하기 어려운 문법이 있다면 아래 글들을 참고하는 것이 좋을 거 같다.

 

 

[Python] 파이썬 try except 예외 처리

파이썬뿐만 아니라 프로그래밍을 하면서 에러가 발생할 경우 프로그램이 중지되는 상황을 다들 한 번씩 겪어봤을 것이다. 하지만 에러가 발생하더라도 프로그램이 중지되질 원하지 않을 경우

snidercp.tistory.com

 

[Python] 파이썬 파일 읽기,수정,삭제

오늘은 파이썬에서 파일을 읽기, 수정, 삭제, 그리고 파일이 존재하는지 여부를 확인하는 방법에 대해 알아보는 시간을 가져보자. 1. 파일 열기와 닫기 파이썬에서 파일을 열고 닫는 것은 파일을

snidercp.tistory.com

 

[Python] 파이썬 딕셔너리

1. 파이썬 딕셔너리란? 파이썬에서 딕셔너리는 키-값(key-value) 쌍을 저장하는 데이터 구조이다. 이것은 매우 유용하며, 특정 키를 사용하여 값을 검색하거나 업데이트하는 데 사용된다. 딕셔너리

snidercp.tistory.com

 

[Python] 파이썬 함수(def)

파이썬에서 함수(Function)는 재사용 가능한 코드 블록을 나타내고, 특정 작업을 수행하는 데 사용된다. 또한 함수는 입력(인자 또는 매개변수)을 받아 처리하고 출력(반환 값)을 생성하는 역할을

snidercp.tistory.com

 

 

읽어주셔서 감사합니다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.