Python 신입 트러블슈팅 면접
새 면접Q. Python 스크립트를 실행했는데 'IndexError: list index out of range' 에러가 발생했습니다. 이 에러의 의미와 디버깅 방법을 설명해주세요.
리스트의 길이와 접근하려는 인덱스 값을 비교해보세요.
IndexError는 리스트의 유효한 인덱스 범위를 벗어난 위치에 접근하려 할 때 발생하는 에러입니다. 예를 들어 길이가 3인 리스트에서 인덱스 3 이상에 접근하면 발생합니다. 디버깅을 위해 먼저 에러 메시지의 라인 번호를 확인하고, 해당 라인에서 리스트의 실제 길이를 len() 함수로 출력해봅니다. 접근하려는 인덱스 값도 함께 출력하여 범위를 벗어났는지 확인합니다. 재발 방지를 위해 리스트 접근 전에 길이를 확인하거나, try-except 구문으로 예외를 처리하는 방법을 사용할 수 있습니다.
- • 리스트 인덱스 범위 초과 시 발생
- • len() 함수로 리스트 길이 확인
- • 에러 라인 번호 확인 후 디버깅
- • 예외 처리 또는 사전 검증으로 재발 방지
API 응답 데이터나 파일에서 읽은 데이터를 리스트로 처리할 때 예상과 다른 데이터 길이로 인해 자주 발생하는 에러입니다.
리스트가 비어있는 경우를 안전하게 처리하는 방법에는 어떤 것들이 있을까요?
Q. 웹 크롤링 코드를 실행했더니 'TypeError: can only concatenate str (not int) to str' 에러가 발생했습니다. 이 에러의 원인과 해결 방법을 설명해주세요.
문자열과 숫자를 더하려고 시도했을 때 발생하는 에러입니다.
TypeError는 서로 다른 타입의 데이터를 호환되지 않는 방식으로 연산하려 할 때 발생합니다. 이 경우 문자열(str)과 정수(int)를 + 연산자로 연결하려 했기 때문에 발생한 것입니다. 해결하려면 str() 함수를 사용해 정수를 문자열로 변환하거나, f-string이나 format() 메서드를 사용해 문자열 포맷팅을 해야 합니다. 디버깅 시에는 type() 함수로 변수의 실제 타입을 확인하고, 필요한 경우 적절한 타입 변환을 수행합니다. 재발 방지를 위해 변수 선언 시 타입을 명확히 하고, 외부 입력값은 항상 타입을 검증하는 습관을 들이면 좋습니다.
- • 서로 다른 타입 간 연산 시도 시 발생
- • str() 함수로 타입 변환 필요
- • type() 함수로 타입 확인
- • f-string 또는 format() 메서드 활용
사용자 입력이나 외부 API에서 받은 데이터를 처리할 때 타입 불일치로 인해 자주 발생하는 에러입니다.
Python에서 암시적 타입 변환이 일어나는 경우와 명시적 변환이 필요한 경우의 차이를 설명해주세요.
Q. 텍스트 파일을 읽는 프로그램에서 'UnicodeDecodeError: codec can't decode byte' 에러가 발생했습니다. 이 문제의 원인과 해결 과정을 단계별로 설명해주세요.
파일의 인코딩 방식과 Python이 읽으려는 인코딩 방식이 다를 때 발생합니다.
UnicodeDecodeError는 파일의 실제 인코딩과 Python이 사용하는 인코딩이 일치하지 않을 때 발생합니다. 먼저 에러 메시지에서 어떤 바이트 위치에서 문제가 발생했는지 확인합니다. 파일의 실제 인코딩을 확인하기 위해 텍스트 에디터나 chardet 라이브러리를 사용할 수 있습니다. 해결 방법으로는 open() 함수에 encoding 파라미터를 명시하거나(예: encoding='utf-8', 'cp949', 'euc-kr'), errors 파라미터를 'ignore' 또는 'replace'로 설정해 에러를 우회할 수 있습니다. 재발 방지를 위해 파일 저장 시 UTF-8로 통일하고, 외부 파일 처리 시에는 항상 인코딩을 명시하는 것이 좋습니다.
- • 파일 인코딩과 읽기 인코딩 불일치 시 발생
- • chardet 라이브러리로 인코딩 자동 감지
- • open() 함수의 encoding 파라미터 명시
- • errors 파라미터로 에러 처리 방식 지정
한글이 포함된 CSV 파일이나 로그 파일을 처리할 때, 특히 Windows 환경에서 생성된 파일을 다룰 때 자주 발생합니다.
UTF-8과 CP949(EUC-KR) 인코딩의 차이점과 각각 언제 사용되는지 설명해주세요.
Q. 대용량 CSV 파일을 처리하는 프로그램이 실행 중 'MemoryError'를 발생시키며 중단됩니다. 이 문제를 진단하고 해결하는 방법을 설명해주세요.
전체 파일을 한 번에 메모리에 로드하는 방식을 개선해야 합니다.
MemoryError는 프로그램이 사용 가능한 메모리를 초과했을 때 발생합니다. 먼저 파일 크기와 시스템의 사용 가능한 메모리를 확인하여 문제를 진단합니다. 해결 방법으로는 파일을 한 번에 읽지 않고 청크(chunk) 단위로 나눠 읽거나, pandas의 경우 chunksize 파라미터를 사용해 반복적으로 처리합니다. 또는 제너레이터를 사용해 한 줄씩 읽어 처리하는 방식으로 메모리 사용량을 줄일 수 있습니다. 불필요한 데이터는 필터링하고, 처리 후 즉시 del 명령어나 가비지 컬렉션을 통해 메모리를 해제합니다. 재발 방지를 위해 대용량 데이터 처리 시에는 항상 스트리밍 방식이나 배치 처리를 고려해야 합니다.
- • 파일을 청크 단위로 분할 처리
- • pandas chunksize 파라미터 활용
- • 제너레이터로 한 줄씩 읽기
- • 불필요한 객체 즉시 메모리 해제
로그 분석, 대용량 데이터 ETL 작업, 머신러닝 데이터 전처리 시 자주 발생하는 문제입니다.
Python의 제너레이터가 메모리 효율적인 이유를 설명해주세요.
Q. 팀원이 작성한 코드를 실행했더니 'ModuleNotFoundError: No module named' 에러가 발생합니다. 이 문제의 원인을 찾고 해결하는 절차를 설명해주세요.
필요한 패키지가 현재 환경에 설치되어 있는지 확인해야 합니다.
ModuleNotFoundError는 import 하려는 모듈이나 패키지가 현재 Python 환경에 설치되지 않았을 때 발생합니다. 먼저 pip list 또는 pip freeze 명령어로 설치된 패키지 목록을 확인합니다. 해결 방법으로는 pip install 명령어로 필요한 패키지를 설치하거나, requirements.txt 파일이 있다면 pip install -r requirements.txt로 일괄 설치합니다. 가상환경을 사용하는 경우 올바른 가상환경이 활성화되어 있는지 확인해야 합니다. 재발 방지를 위해 프로젝트에 requirements.txt 파일을 관리하고, 가상환경을 사용하여 프로젝트별 의존성을 분리하는 것이 좋습니다.
- • 필요한 모듈이 설치되지 않아 발생
- • pip list로 설치된 패키지 확인
- • pip install로 패키지 설치
- • requirements.txt로 의존성 관리
새로운 개발 환경 설정 시나 팀원과 코드를 공유할 때 자주 발생하는 문제입니다.
가상환경을 사용하는 이유와 venv 또는 virtualenv를 사용한 가상환경 생성 방법을 설명해주세요.
Q. 작성한 while 루프가 종료되지 않고 계속 실행되는 문제가 발생했습니다. 무한 루프를 진단하고 디버깅하는 방법을 설명해주세요.
루프의 종료 조건이 제대로 변경되고 있는지 확인해야 합니다.
무한 루프는 종료 조건이 절대 만족되지 않거나 루프 내에서 조건 변수가 업데이트되지 않을 때 발생합니다. 디버깅을 위해 먼저 Ctrl+C로 프로그램을 강제 종료하고, while 조건문과 조건 변수를 확인합니다. 루프 내부에 print() 문을 추가하여 조건 변수의 값이 어떻게 변하는지 추적합니다. 조건 변수가 예상대로 업데이트되지 않는 경우 로직을 수정하고, 안전장치로 최대 반복 횟수를 설정하는 방법도 고려할 수 있습니다. 재발 방지를 위해 복잡한 조건문은 단순화하고, 루프 설계 시 명확한 종료 조건을 먼저 정의하는 습관이 필요합니다.
- • 종료 조건이 만족되지 않아 발생
- • print()로 조건 변수 값 추적
- • 조건 변수의 업데이트 로직 확인
- • 최대 반복 횟수 제한 설정
사용자 입력을 받거나 네트워크 요청을 반복하는 프로그램에서 예외 상황 처리가 누락되면 발생합니다.
Python 디버거(pdb)를 사용하여 루프를 단계별로 실행하며 디버깅하는 방법을 설명해주세요.
Q. API 응답 데이터를 처리하는 코드에서 'AttributeError: NoneType object has no attribute' 에러가 발생했습니다. 이 문제의 원인 분석과 방어적 코딩 방법을 설명해주세요.
예상한 객체가 실제로는 None 값인 경우 발생하는 에러입니다.
AttributeError는 None 객체에 대해 속성이나 메서드를 호출하려 할 때 발생합니다. 이는 함수가 예상과 달리 None을 반환했거나, 딕셔너리의 get() 메서드가 키를 찾지 못했을 때 주로 발생합니다. 디버깅을 위해 에러가 발생한 라인 이전에 변수가 None인지 확인하는 print() 또는 type() 함수를 사용합니다. 해결 방법으로는 속성 접근 전에 if 문으로 None 체크를 하거나, getattr() 함수를 사용해 기본값을 설정할 수 있습니다. API 응답의 경우 딕셔너리의 get() 메서드에 기본값을 지정하거나, try-except로 예외를 처리합니다. 재발 방지를 위해 외부 데이터는 항상 검증하고, Optional 타입 힌트를 사용해 None 가능성을 명시하는 것이 좋습니다.
- • None 객체에 속성 접근 시도 시 발생
- • 속성 접근 전 None 체크 필수
- • getattr() 함수로 안전한 속성 접근
- • 딕셔너리 get() 메서드에 기본값 설정
REST API 응답이나 데이터베이스 쿼리 결과가 예상과 다를 때 자주 발생하는 에러입니다.
Python의 Optional 타입 힌트와 이를 활용한 안전한 코드 작성 방법을 설명해주세요.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!