관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

애러 읽고 대처하기 2 - 자주 접하는 에러코드 2가지 : Index, Import error 본문

웹 · 앱 개발/디버깅

애러 읽고 대처하기 2 - 자주 접하는 에러코드 2가지 : Index, Import error

huenuri 2024. 7. 30. 10:53

전 시간에 이어 자주 접하는 애러 두 가지를 더 학습해보고 실습 문제를 풀어보고자 한다. 그런 다음 6번째 애러에 대해서도 하나 더 학습해볼 수도 있다.
아침에 낮잠을 너무 많이 자서 공부 일정이 많이 지체되었다. 이제 힘을 내서 아침 시간 동안 2주차 학습을 끝마치고자 한다. 오후에는 부모님이 오시니 방 청소도 하고 식사도 하며 좀 놀게 될 것 같다. 그러니 이 시간에 최대한 집중해서 공부를 해보자!


 

이론 5 - 자주 접하는 에러 코드 4 : Index error

Index error

인덱스는 리스트에서 몇번째 원소를 찾고자 할 때 사용한다. 여기서는 인덱스가 맞지 않을 때 발생하는 애러이다.

이 예제는 첫번째 원소를 리턴해주는 함수이고, first_character에 hello라는 값을 넣어주면 h를 리턴한다.
하지만 빈 문자열이 들어가면 어떻게 될까?

 

 

빈 문자열의 첫번째 원소는 0이기 때문에 없다.

 

 

 

이 경우에는 에러를 띄운다. 접근하려는 인덱스가 범위에서 벗어났다는 뜻이다.

 

 

 

string이 주어졌을 때 그 길이를 파악해야 에러가 뜨지 않게 된다. 0번째 글자가 있으려면(index = 0) 인덱스가 0보다는 커야 한다. 0보다 크다면 0번째 글자를 리턴하고, 그렇지 않으면 빈 문자열을 리턴하도록 설정한다.

 

 

 

또는 이렇게 경고 메시지를 띄울 수도 있다.

 

 

이 함수는 numbers를 받아서 평균값을 리턴해주는 함수이다.

 

 

 

아무런 숫자가 들어오지 않았다면? 둘다 0이 되어 프로그램은 실행되지 않는다.

 

 

 

이럴 때는 0으로 나누는 상황을 피해야 한다.

 

 

 

 

numbers에 하나라도 숫자가 있다면 그 값을 리턴하고, 그렇지 않으면 숫자가 없다는 메시지를 띄워야 한다. 0으로 나누어지는 상황을 if문을 통해 피해주는 것이 중요하다.


 

이론 4 - Import error

이 에러는 큰 프로젝트를 할 때 볼 수 있는 에러이다. math에는 +, - 외에도 루트 같은 연산자를 불러올 수 있다. 루트를 사용하기 위해 squareroot라는 함수를 불러왔다.

 

 

 

이름을 찾을 수 없다는 에러가 뜨는데, 실제로 이 이름이 있는지 확인해봐야 한다.

 

 

 

찾아보면 이 함수는 sqrt임을 알 수 있다. 이름이 틀린 것이다.

 


 

실습 2 - 성적 처리 2

 

첫번째 오류 : value

점이라는 글자를 제거하고 point를 sum에 더해서 그 길이로 나누어 평균을 구하는 문제이다. 그냥은 잘 출력이 되는데 빈 문자열이 들어가면 오류 메세지가 뜬다.

 

 

7번째 줄에서 point를 int로 변환할 수 없다는 뜻이다.

 

 

score에서 점이라는 글자를 제거했으므로 빈 문자열이 된다. 이럴 때는 point를 빈 문자열인 경우와 아닌 경우를 나누어서 처리하면 된다.

 

 

 

하지만 빈 문제열을 계산하여 평균이 15.0이 되는 것을 볼 수 있다. 원래는 30.0이 나와야 하는데 len의 길이가 2이다.

 

 

 

두번째 오류 : 빈 문자열 처리

변수 하나를 만드는데, 이 변수는 평균 계산에 포함시킨 값만 1씩 올라가도록 하는 변수이다.
point가 빈 문자열이 아닐 때 valid_score_count를 1씩 증가시키도록 한다. 그리고 12번째 줄의 len이 아닌 valid_score_count를 넣어준다.

 

 

 

그러면 첫번째 줄에서는 3점이 잘 출력되었지만 두번째에서는 애러가 뜨는 것을 볼 수 있다.

 

 

valid_score_count이 0으로 계산되어 발생하는 오류이다.

 

 

 

세번째 오류 : Zero Division

문제에서 리스트에 정보가 없을 때는 none을 리턴하라고 했으므로 조건식을 하나 추가하면 될 것이다. 아니라면 아래 코드가 실행된다. return을 하면 함수가 끝나기 때문이다.

 

 

이 단원의 실습 문제들은 난이도가 높아서 혼자서는 해결하기 힘든 문제들이다. 강의 영상을 보면서 따라하고 나중에 혼자서 풀 수 있도록 연습해야겠다.

 


 

두번째 단원 학습을 마치고

이렇게 두번째 단원 학습을 마쳐본다. 강의 영상도 길고 많아서 10시부터 1시간 반 넘게 걸린 것 같다. 에러 코드를 고치는 게 정말 쉽지 않았다. 그래도 어떤 에러가 있는지 살펴보면서 한 단계씩 진행해보니 코드가 읽어졌다.

다음 단원에서는 자주 접하는 에러코드 하나와 에러를 피할 수 있는 방법에 대해서 학습해볼 것이다. 지금 청소를 먼저 해야 하나, 아니면 공부를 더 하다 진행할지 고민이 된다. 이번주에는 깨끗이 정리하며 생활하기로 다짐했는데 여전히 난장판이 되고 말았다.