백준 문제를 풀다 보면 여러 가지의 파이썬 에러를 만나게 된다.
아래는 파이썬 런타임 에러 종류이다.
파이썬 런타임 에러 종류들을 하나씩 살펴보자.
1. ValueError
input_value = input("숫자를 입력하세요: ")
number = int(input_value)
print(number)
----------------------------------console------------------------------------
ValueError: invalid literal for int() with base 10: 'ㅇ'
위 코드에서 사용자로부터 입력을 받아 정수로 변환하는 과정에서 ValueError
가 발생할 수 있다.
사용자가 숫자가 아닌 다른 값을 입력하면, int()
함수가 해당 값을 정수로 변환할 수 없어 ValueError
를 발생시킨다. 예를 들어, 사용자가 "ㅇ"와 같이 숫자가 아닌 값을 입력하면 ValueError
가 발생한다.
2. IndexError
my_list = [1, 2, 3]
element = my_list[3]
print(element)
----------------------------------console------------------------------------
IndexError: list index out of range
위 코드에서는 길이가 3인 my_list
에서 4번째 요소에 접근하려고 시도하고 있다. 하지만 인덱스는 0부터 시작하기 때문에 4번째 요소는 존재하지 않는다. 이로 인해 IndexError
가 발생하게 된다. 배열 인덱스가 유효한 범위 내에 있지 않을 때 IndexError
가 발생하게 된다.
3. NameError
print(x)
----------------------------------console------------------------------------
NameError: name 'x' is not defined
위 코드에서는 정의되지 않은 변수 x
를 출력하려고 시도한다. x
라는 변수가 정의되지 않았기 때문에 NameError
가 발생하게 된다. 이는 변수를 사용하기 전에 해당 변수를 정의하거나 초기화해야 함을 보여준다.
4. TypeError
x = "5"
y = 10
result = x + y
print(result)
----------------------------------console------------------------------------
TypeError: can only concatenate str (not "int") to str
위 코드에서는 문자열과 정수를 더하려고 시도한다. 문자열인 x
와 정수인 y
를 더하려면 두 개의 동일한 유형의 값이 필요하지만, 서로 다른 유형의 값이 더해져서 TypeError
가 발생하게 된다. 이를 해결하려면 두 값을 동일한 유형으로 변환하거나 적절한 유형 변환 함수를 사용해야 한다.
5. AssertionError
x = 5
assert x > 10, "x는 10보다 작거나 같아야 합니다."
----------------------------------console------------------------------------
AssertionError: x는 10보다 작거나 같아야 합니다.
위 코드에서는 assert
문을 사용하여 x
가 10보다 큰지를 확인하고 있다. 하지만 x
의 값이 5이므로 조건이 거짓이 되어 AssertionError
가 발생하게 된다. assert
문은 주어진 조건이 거짓일 때 예외를 발생시키는데, 이 경우에는 x
가 10보다 작거나 같기 때문에 예외가 발생한다.
6. ImportError
import non_existent_module
----------------------------------console------------------------------------
ModuleNotFoundError: No module named 'non_existent_module'
위 코드에서는 존재하지 않는 모듈인 non_existent_module
을 import하려고 시도한다. 해당 모듈이 존재하지 않기 때문에 ImportError
가 발생한다. 이는 잘못된 모듈 이름을 사용하거나 필요한 모듈을 설치하지 않은 경우에 발생할 수 있다.
7. FileNotFoundError
file_path = "non_existent_file.txt"
with open(file_path, 'r') as file:
contents = file.read()
----------------------------------console------------------------------------
FileNotFoundError: [Errno 2] No such file or directory: 'non_existent_file.txt'
위 코드에서는 존재하지 않는 파일인 "non_existent_file.txt"를 열려고 시도한다. 해당 파일이 존재하지 않기 때문에 FileNotFoundError
가 발생하게 된다. 이는 파일을 열려고 할 때 파일 경로를 잘못 지정하거나, 파일이 실제로 존재하지 않는 경우에 발생할 수 있다.
8. SyntaxError
if x == 5
print("x는 5입니다.")
----------------------------------console------------------------------------
SyntaxError: invalid syntax
위 코드에서는 조건문인 if
문이 콜론(:
)으로 끝나지 않았다. 이는 파이썬의 구문 규칙에 어긋나므로 SyntaxError
가 발생하게 된다. 조건문 뒤에는 반드시 콜론(:
)을 붙여야 하므로 아래와 같이 수정해야 한다.
if x == 5:
print("x는 5입니다.")
----------------------------------console------------------------------------
x는 5입니다.
9. EOFError
유형 1. 사용자가 입력 대기 중에 입력 스트림이 종료되었을 때 발생
input_value = input("값을 입력하세요: ")
print("입력한 값은:", input_value)
----------------------------------console------------------------------------
EOFError
위 코드에서는 사용자로부터 값을 입력받고 출력하는 간단한 예시이다. 그러나 이 코드는 사용자로부터 입력을 받을 때 EOFError
가 발생할 수 있다. 이는 사용자가 입력 대기 중에 입력 스트림이 종료되었을 때 발생합니다.
예를 들어, 코드를 실행하고 사용자가 입력 대기 상태에서 Ctrl + D (Unix/Linux) 또는 Ctrl + Z (Windows)를 눌러 입력 스트림을 종료하면 EOFError
가 발생하게 된다. 이는 입력 대기 중에 더 이상 입력이 없는 상황에서 발생하는 예외이다.
유형 2. 파일을 읽어오는 도중에 파일의 끝에 도달하여 EOFError
가 발생
#test.txt
a
b
c
d
try:
with open("test.txt", "r") as file:
while True:
line = file.readline()
if not line:
raise EOFError("파일의 끝에 도달했습니다.")
print(line)
except EOFError as e:
print(e)
----------------------------------console------------------------------------
a
b
c
d
파일의 끝에 도달했습니다.
유형 3. 입력/출력값의 범위가 잘못되었을 때 발생
start = int(input("시작 값: "))
end = int(input("끝 값: "))
for num in range(start, end + 1):
print(num)
----------------------------------console------------------------------------
(5, 0 입력시)
시작 값: 5
끝 값: 0
위 코드는 사용자로부터 시작 값과 끝 값 입력을 받아서 해당 범위의 숫자를 출력하는 예시이다. 그러나 시작 값이 끝 값보다 큰 경우, 즉 출력 범위가 잘못된 경우 EOFError
를 발생시킨다. 입력을 잘못해도 콘솔에는 아무 에러도 뜨지 않기 때문에 아무 일도 일어나지 않은 것처럼 보이지만, EOFError
가 발생하면 프로그램이 중단되었기 때문에 아무 일도 일어나지 않은 것이다.
여기서 EOFError
를 확인하려면 아래처럼 코드를 추가하면 된다.
start = int(input("시작 값: "))
end = int(input("끝 값: "))
if start > end:
raise EOFError("출력 범위가 잘못되었습니다.")
for num in range(start, end + 1):
print(num)
----------------------------------console------------------------------------
(5, 0 입력시)
시작 값: 5
끝 값: 0
Traceback (most recent call last):
File "경로/test2.py", line 5, in <module>
raise EOFError("출력 범위가 잘못되었습니다.")
EOFError: 출력 범위가 잘못되었습니다.
10. AttributeError
유형 1. 존재하지 않는 속성에 접근하는 경우 발생
obj = 'test'
print(obj.attribute)
----------------------------------console------------------------------------
AttributeError: 'str' object has no attribute 'attribute'
유형 2. 모듈이나 클래스에 존재하지 않는 메서드나 속성에 접근하는 경우 발생
import math
print(math.some_function)
----------------------------------console------------------------------------
AttributeError: module 'math' has no attribute 'some_function'
유형 3. 문자열에 존재하지 않는 메서드를 호출하는 경우 발생
string = "Hello, World!"
print(string.reverse()) # 문자열에는 reverse() 메서드가 존재하지 않아 AttributeError가 발생합니다.
----------------------------------console------------------------------------
AttributeError: 'str' object has no attribute 'reverse'
- RecursionError
- ZeroDivisionError
- ModuleNotFoundError
- UnboundLocalError
- OverflowError
나머지들은 다음 포스팅에…
'IT' 카테고리의 다른 글
[Eclipse, Java] 이클립스(Eclipse)에서 Java 프로젝트 생성하는 방법 (0) | 2025.02.06 |
---|---|
[Eclipse Debug] 이클립스로 디버깅 하는 방법 (0) | 2025.02.06 |
CVS Update가 뭔데 맨날 이클립스가 멈추는거야? 이거 뭔지 아는 사람? (0) | 2025.02.05 |
백준 / Python / 2566 / 최댓값 / 문제풀이 / 상세설명 (0) | 2023.05.29 |
파이썬 기초 / Python / dictionary / 딕셔너리 (0) | 2023.05.24 |
파이썬 기초 / Python / 지우기 (0) | 2023.05.22 |
백준 / Python / 1316 / 그룹 단어 체커 / 문제풀이 / 상세설명 (0) | 2023.05.22 |
파이썬 기초 / Python / format / 포맷팅 (0) | 2023.05.20 |
댓글