본문 바로가기
  • 머킹이의 머신로그
오늘부터 파이썬

Python 런타임 에러

by 머킹 2024. 8. 24.
728x90

[파이썬] Python 런타임 에러의 원인과 해결 방법

 

 

안녕하세요 머킹입니다.

 

백준을 풀고 있는데 이제 런타임 에러에 대해 알려주더라구요.

근데 옆에 설명이 없어서 이게 좀 아쉬워서

제가 따로 적어봤습니다.

 

1. ValueError

설명

ValueError는 함수가 예상하지 못한 값을 인자로 받을 때 발생합니다.

예를 들어, 숫자로 변환할 수 없는 문자열을 int() 함수에 전달하면 이 에러가 발생합니다.

int("hello")  # ValueError: invalid literal for int() with base 10: 'hello'

해결 방법

입력 값이 적절한 형식인지 확인하고, 필요에 따라 예외 처리를 통해

적절한 오류 메시지를 제공하거나 기본값을 설정합니다.

 

2. IndexError

설명

IndexError는 리스트, 튜플 등의 시퀀스 자료형에서 인덱스가 범위를 벗어났을 때 발생합니다.

lst = [1, 2, 3]
print(lst[5])  # IndexError: list index out of range

해결 방법

인덱스 접근 전에 시퀀스의 길이를 확인하거나, 예외 처리를 통해 인덱스가 유효한 범위 내에 있는지 검증합니다.

 

 

 

3. NameError

설명

NameError는 지역 변수나 전역 변수에 접근할 때 해당 변수가 정의되어 있지 않은 경우 발생합니다.

print(undeclared_variable)  # NameError: name 'undeclared_variable' is not defined

해결 방법

변수가 정의되어 있는지 확인하고, 변수 선언을 올바르게 했는지 검토합니다.

 

 

4. TypeError

설명

TypeError는 함수나 연산자가 잘못된 타입의 인자를 받았을 때 발생합니다.

'string' + 1  # TypeError: can only concatenate str (not "int") to str

해결 방법

연산에 사용되는 데이터 타입이 올바른지 확인하고, 필요한 경우 타입 변환을 수행합니다.

 

 

5. AssertionError

설명

AssertionError는 assert 문이 실패할 때 발생합니다.

이는 코드가 예상한 조건을 만족하지 않을 때 오류를 발생시키기 위해 사용됩니다.

assert 2 + 2 == 5  # AssertionError

해결 방법

assert 문에 사용된 조건이 올바른지 검토하고, 코드의 논리가 정확한지 확인합니다.

 

 

6. ImportError

설명

ImportError는 모듈이나 패키지를 임포트할 때 발생하는 에러로,

해당 모듈이 존재하지 않거나 올바르게 설치되지 않았을 때 발생합니다.

import non_existent_module  # ImportError: No module named 'non_existent_module'

해결 방법

모듈이 설치되어 있는지 확인하고, 올바른 모듈 이름을 사용했는지 검토합니다.

 

 

7. FileNotFoundError

설명

FileNotFoundError는 파일을 열거나 접근할 때 해당 파일이 존재하지 않을 때 발생합니다.

open('non_existent_file.txt')  # FileNotFoundError: [Errno 2] No such file or directory: 'non_existent_file.txt'

해결 방법

파일 경로가 올바른지 확인하고, 파일이 존재하는지 체크합니다.

 

 

8. SyntaxError

설명

SyntaxError는 코드에 문법적인 오류가 있을 때 발생합니다. 이는 코드가 파이썬 문법에 맞지 않을 때 발생합니다.

print("Hello World"  # SyntaxError: unexpected EOF while parsing

해결 방법

문법 오류를 수정하고, 코드가 올바른 문법을 따르도록 수정합니다.

 

 

9. EOFError

설명

EOFError는 입력 함수가 예상보다 일찍 파일의 끝에 도달했을 때 발생합니다.

주로 파일을 읽거나 사용자 입력을 받을 때 발생할 수 있습니다.

input()  # EOFError: EOF when reading a line

해결 방법

입력 함수 호출 시 적절한 입력이 제공되는지 확인하고, 파일의 끝을 예외 처리합니다.

 

 

10. AttributeError

설명

AttributeError는 객체에 존재하지 않는 속성이나 메서드에 접근할 때 발생합니다.

'string'.non_existent_method()  # AttributeError: 'str' object has no attribute 'non_existent_method'

해결 방법

속성이나 메서드가 객체에 존재하는지 확인하고, 올바른 속성이나 메서드를 사용합니다.

 

 

11. RecursionError

설명

RecursionError는 재귀 함수 호출이 너무 깊어져서 최대 재귀 깊이를 초과할 때 발생합니다.

def recurse():
    recurse()

recurse()  # RecursionError: maximum recursion depth exceeded in comparison

해결 방법

재귀 호출의 종료 조건을 확인하고, 재귀 깊이를 줄이거나 반복문으로 대체합니다.

 

 

12. ZeroDivisionError

설명

ZeroDivisionError는 0으로 나누기를 시도할 때 발생합니다.

10 / 0  # ZeroDivisionError: division by zero

해결 방법

나누기 연산 전에 제수의 값이 0이 아닌지 확인하고, 예외 처리를 통해 0으로 나누는 상황을 방지합니다.

 

 

13. ModuleNotFoundError

설명

ModuleNotFoundError는 모듈을 임포트할 때 해당 모듈을 찾을 수 없을 때 발생합니다.

이는 ImportError의 하위 클래스입니다.

import non_existent_module  # ModuleNotFoundError: No module named 'non_existent_module'

해결 방법

모듈이 올바르게 설치되어 있는지 확인하고, 모듈 이름을 정확히 입력했는지 검토합니다.

 

 

14. UnboundLocalError

설명

UnboundLocalError는 지역 변수가 참조되기 전에 값이 할당되지 않았을 때 발생합니다.

def func():
    print(x)  # UnboundLocalError: local variable 'x' referenced before assignment
    x = 10

func()

해결 방법

변수를 사용하기 전에 값이 할당되었는지 확인하고, 필요에 따라 전역 변수와 지역 변수를 적절히 구분합니다.

 

 

15. OverflowError

설명

OverflowError는 연산 결과가 너무 커서 표현할 수 없는 경우 발생합니다.

import math
math.exp(1000)  # OverflowError: math range error

해결 방법

연산 결과가 범위 내에 있도록 조정하고, 필요에 따라 적절한 데이터 타입을 사용합니다.

 

 

16. Error (기타)

설명

위에서 언급하지 않은 나머지 에러는 일반적으로 Exception의 하위 클래스들입니다. 이들 에러는 특정 상황에 따라 다르게 발생하며, 구체적인 원인은 문서화된 각 에러 메시지를 통해 확인할 수 있습니다.

해결 방법

문서나 에러 메시지를 참고하여 원인을 분석하고 적절한 예외 처리를 추가합니다.