4. Python과 예외처리

header


PART 1. Python의 활용 1

💡 전문가의 조언

Python에서도 Java와 마찬가지로 기본적인 문법은 생략하고 바로 소스코드를 통해 코드를 읽고 해석하는 방법을 학습합니다. 본문에 수록된 내용은 Java를 충분히 학습하였다는 전제하에 진행되므로, 어려움을 느끼는 수험생들은 앞의 Java 섹션을 먼저 공부한 후 학습을 진행하는 것이 좋습니다.

1.1 Python의 개요

Python은 객체지향 기능을 지원하는 스크립트 언어로, 다른 언어에 비해 문법이 간단하다는 장점이 있습니다.

Java와의 기본 작성법 차이점

구분 Python Java
자료형 선언 불필요 필요
문자/문자열 '', "", ''', """ 모두 사용 가능 문자: '', 문자열: ""
문장 끝 세미콜론(;) 불필요 세미콜론(;) 필수
코드 블록 콜론(:)과 들여쓰기로 구분 중괄호({})로 구분

이번 섹션에서 배울 내용

  • 자료형: 리스트(List), 세트(Set)
  • 입출력 함수: input, print
  • 슬라이스(Slice)
  • Range

1.2 Range와 슬라이스 정리

Range

연속된 숫자를 생성하는 함수로, 리스트 반복문에서 자주 사용됩니다.

형식 설명 예시
range(최종값) 0부터 최종값-1까지 range(5) → 0, 1, 2, 3, 4
range(초기값, 최종값) 초기값부터 최종값-1까지 range(2, 5) → 2, 3, 4
range(초기값, 최종값, 증가값) 증가값만큼 증감 range(1, 10, 2) → 1, 3, 5, 7, 9

슬라이스(Slice)

문자열이나 리스트와 같은 순차형 객체에서 일부를 잘라 반환합니다.

형식 설명
객체명[:] 전체
객체명[:3] 처음부터 인덱스 2까지
객체명[3:] 인덱스 3부터 끝까지
객체명[1:5] 인덱스 1부터 4까지
객체명[::-1] 역순
객체명[::2] 2칸씩 건너뛰며
📌 슬라이스 핵심 포인트

• 최종위치는 포함되지 않음
• 음수 인덱스 사용 가능 (-1은 마지막 요소)
• 인덱스 생략 가능


PART 2. Python의 활용 2

💡 학습 TIP

람다 식과 클래스를 활용한 Python 프로그램의 코드 해석 능력을 기릅니다.

2.1 람다 식 (Lambda Expression)

람다 식은 어떤 문제를 해결하기 위한 과정을 수학식으로 표현한 것입니다. 프로그래밍에서는 수학적 연산을 수행하는 함수를 간소화할 때 사용합니다.

기본 형식:

lambda 변수명 : 수학식

일반 함수와 람다 식 비교:

# 일반 함수
def func(x):
    return x * x - 3
print(func(10))  # 결과: 97

# 람다 식
func = lambda x : x * x - 3
print(func(10))  # 결과: 97
📌 Python의 매개변수 전달

Python에서 함수에 전달된 매개변수는 함수 내부에서만 유효합니다. 따라서 함수 내에서 매개변수를 변경해도 원본 변수는 영향받지 않습니다.


PART 3. 예외 처리

💡 학습 TIP

예외 처리는 프로그램 실행 중 발생할 수 있는 오류에 대비하는 중요한 기법입니다. Java의 try-catch 구문과 주요 예외 객체를 정확히 이해하세요.

3.1 예외 처리의 개념

예외 처리(Exception Handling)는 예외가 발생했을 때 프로그램에 해당 문제에 대비해 작성해 놓은 처리 루틴이 수행되도록 하는 것입니다.

예외 처리의 일반적인 동작:

  • 프로그램을 종료시키거나
  • 로그(Log)를 남기는 것

대표적인 예외 발생 원인:

원인 설명
컴퓨터 하드웨어 문제 메모리 부족, 디스크 오류 등
운영체제 설정 실수 잘못된 환경 변수 등
라이브러리 손상 의존성 파일 손상
사용자 입력 실수 잘못된 형식의 입력
받아들일 수 없는 연산 0으로 나누기 등
할당하지 못하는 기억장치 접근 null 참조 등

3.2 Java의 예외 처리

Java는 예외를 객체로 취급하며, 예외와 관련된 클래스를 java.lang 패키지에서 제공합니다.

try-catch 문의 기본 형식

try {
    예외가 발생할 가능성이 있는 코드;
}
catch (예외객체1 매개변수) {
    예외객체1에 해당하는 예외 발생  처리 코드;
}
catch (예외객체2 매개변수) {
    예외객체2에 해당하는 예외 발생  처리 코드;
}
catch (Exception 매개변수) {
     예외에 해당하지 않는 예외 발생  처리 코드;
}
finally {
    예외 발생 여부와 관계없이 무조건 실행되는 코드;
}

try-catch 문의 특징

  • try 블록에서 예외 발생 시 catch 블록으로 이동
  • 예외 발생 이후의 코드는 실행되지 않음
  • catch 블록의 변수는 해당 블록에서만 유효
  • try-catch 문 중첩 가능
  • 실행 코드가 한 줄이라도 중괄호 생략 불가
  • finally 블록은 항상 실행

3.3 Java의 주요 예외 객체

예외 객체 발생 원인
ClassNotFoundException 클래스를 찾지 못한 경우
NoSuchMethodException 메소드를 찾지 못한 경우
FileNotFoundException 파일을 찾지 못한 경우
InterruptedIOException 입출력 처리가 중단된 경우
ArithmeticException 0으로 나누는 등의 산술 연산 예외
IllegalArgumentException 잘못된 인자를 전달한 경우
NumberFormatException 숫자로 변환할 수 없는 문자열을 숫자로 변환
ArrayIndexOutOfBoundsException 배열의 범위를 벗어난 접근
NegativeArraySizeException 0보다 작은 값으로 배열 크기 지정
NullPointerException 존재하지 않는 객체 참조
📌 예외 처리 실행 흐름

1. try 블록 실행
2. 예외 발생 시 → 해당 catch 블록으로 이동
3. finally 블록 실행 (예외 발생 여부와 무관)
4. try-catch 문 이후 코드 계속 실행


연습문제

Part 1 - Python의 활용 1

문제 1

다음 Python 프로그램의 실행 결과를 작성하시오.

Python Set
animals = {'고양이', '강아지', '토끼'}
animals.add('햄스터')
animals.add('고양이')
animals.remove('토끼')
animals.update(('강아지', '앵무새', '거북이'))
print(animals)

문제 2

다음 Python 프로그램의 실행 결과를 작성하시오.

Python 비교연산
m, n = 50, 75
print(m >= n)

문제 3

다음 Python 프로그램의 실행 결과를 작성하시오. (줄바꿈은 /로 구분)

Python 2차원 리스트
matrix = [[10, 20], [30, 40, 50], [60]]

print(matrix[1])
print(matrix[1][2])

for row in matrix:
    for val in row:
        print(val, end=' ')
    print()

문제 4

다음 Python 프로그램의 실행 결과를 작성하시오.

Python 비트연산
num = 64
output = 0

for k in range(1, 4):
    output = num >> k
    output = output + 2

print(output)

문제 5

다음 Python 프로그램의 실행 결과를 작성하시오.

Python 클래스
class DataHolder:
    items = ['Apple', 'Banana', 'Cherry',
             'Date', 'Elderberry']

obj = DataHolder()
result = ''

for fruit in obj.items:
    result = result + fruit[-1]

print(result)

문제 6

다음 Python 프로그램의 실행 결과를 작성하시오.

Python 슬라이스
msg = 'HELLO WORLD PYTHON'
part1 = msg[0:5] + msg[11:17]
part2 = ' IS %s' % 'FUN'
print(part1 + part2)

문제 7

다음 Python 프로그램의 괄호에 들어갈 알맞은 메소드명을 작성하시오.

Python 입력
a, b = input('두 수를 쉼표로 구분하여 입력 : ').(      )(',')
print('첫 번째 값 :', a)
print('두 번째 값 :', b)

# 실행결과
# 두 수를 쉼표로 구분하여 입력 : 15,25
# 첫 번째 값 : 15
# 두 번째 값 : 25

Part 2 - Python의 활용 2

문제 8

다음 Python 프로그램의 실행 결과를 작성하시오.

Python 리스트
def process(arr):
    for idx in range(len(arr) // 2):
        arr[idx], arr[-idx-1] = arr[-idx-1], arr[idx]

data = [10, 20, 30, 40, 50, 60, 70, 80]
process(data)
print(sum(data[::2]) - sum(data[1::2]))

문제 9

다음 Python 프로그램의 실행 결과를 작성하시오.

Python 함수
def check(item):
    if type(item) == type(50):
        return 50
    elif type(item) == type("hello"):
        return len(item)
    else:
        return 10

x = "python"
y = 3.14
z = [1, 2, 3]

print(check(x) + check(y) + check(z))

Part 3 - 예외 처리

문제 10

다음 Java 프로그램의 실행 결과를 작성하시오.

예외처리 Java
public class Test {
    public static void main(String[] args) {
        int result = 0;
        try {
            execute();
        }
        catch (ArithmeticException e) {
            result = result + 5;
        }
        catch (Exception e) {
            result = result + 50;
        }
        finally {
            result = result + 200;
        }
        System.out.print(result);
    }

    static void execute() throws Exception {
        throw new ArithmeticException();
    }
}

문제 11

다음 상황에 가장 적합한 Java 예외 객체를 <보기>에서 찾아 기호로 작성하시오. (①, ②, ③, ④ 순서대로 쉼표로 구분)

예외처리 Java
① 정수를 0으로 나누려고 시도한 경우
② 문자열 "ABC"를 정수로 변환하려고 시도한 경우
③ 배열을 arr[5]로 선언한 후 arr[7]에 접근한 경우
④ 초기화되지 않은 객체의 메소드를 호출한 경우

<보기>
ㄱ ClassNotFoundException
ㄴ NoSuchMethodException
ㄷ FileNotFoundException
ㄹ InterruptedIOException
ㅁ ArithmeticException
ㅂ IllegalArgumentException
ㅅ NumberFormatException
ㅇ ArrayIndexOutOfBoundsException
ㅈ NegativeArraySizeException
ㅋ NullPointerException

핵심 요약

Part 1 - Python 기본

  • 리스트: append()(추가), remove()(삭제), 인덱싱/슬라이싱
  • 세트: 중복 불허, add()(단일 추가), update()(여러 개 추가)
  • Range: range(최종), range(초기, 최종), range(초기, 최종, 증가)
  • 슬라이스: [시작:끝], [::-1](역순), 끝 인덱스는 포함 안 됨

Part 2 - Python 활용

  • 람다 식: lambda 변수 : 수학식
  • map 함수: map(함수, 반복가능객체) - 각 요소에 함수 적용
  • 클래스: self는 객체 자신을 참조

Part 3 - 예외 처리

  • try-catch-finally: try에서 예외 발생 시 catch로 이동, finally는 항상 실행
  • 주요 예외: NullPointerException(null 참조), ArrayIndexOutOfBoundsException(배열 범위 초과), ArithmeticException(산술 오류)
  • 예외 던지기: throw new 예외객체()