가장 많이 나타나는 오류

쥬쥬·2022년 4월 3일
0
  1. TypeError: 'int' object is not iterable
  • 상황: for in 구문에서 범위를 지정하는 부분을 정수로 주었을때 나타나는 오류. for 반복문 쓸때 제일 많이 볼 수 있다.

    예를 들면 다음 코드를 실행하면 바로 이 오류가 뜬다.

for i in 10:
    print(i)
  • 오류 발생 이유: iterable 객체 자리에 정수형 자료(int)를 입력했기 때문. C++처럼 10을 넣으면 10번을 반복해준다는게 아니다. iterable 객체에서 자료를 하나씩 꺼내오는 것이기 때문.

    	iterable 객체 - 리스트(list), 튜플(tuple), 딕셔너리(dict), 집합(set), 문자열(str), range(범위값)
  • 해결법: iterble 객체를 입력하면 됨. 특히 위의 상황처럼 10번을 반복하고 싶다면 range(10)을 입력해서 실행하자.
    파이썬의 for in 반복문은 C++의 그것과 다름을 인지하자.

  1. IndexError: list index out of range
  • 상황: for in 구문 사용할 때 자주 발생함. 아래 코드에서 lim 을 정의하지 않고 for 구문을 돌릴경우(len(parts)만 써서 for문 사용시) 해당 오류가 발생
def makeScode3(ttt=''):
    ttt=txt.strip()
    parts=ttt.split("','")
    lim=round(len(parts)/8)
    sssdict={}

   for i in range(lim):
       seed=i*8+1
       scode=parts[seed]
       com=parts[seed+1].strip()
       sssdict[scode]=com
    return sssdict

makeScode3(txt)
  • 오류 발생 이유: for문의 iterable 객체에서 가져올 수 있는 인덱스의 수를 초과해서 for문이 실행되기 때문에 발생한다.
    위 코드에서는 원본 자료에서 일정 부분만 추출할 때, 특정 문자를 찾을 때 실행되는 코드가 전체 문자열 개수보다 훨씬 더 많이 실행되기 때문이다.

  • 해결법: for문의 실행 순서를 차례차례 따져보면서(i를 함께 출력) iterable 객체의 인덱스보다 얼마나 과도하게 초과하는지, 초과한다면 어떻게 조절할지를 판단해서 수정한다.

  1. ValueError: substring not found
  • 상황: 장문의 문자열 자료가 일정한 패턴을 보일 때, 그 자료 내에서 특정 문자를 지정하고 문자의 인덱스를 추출, 추출한 값 이후로 일부분을 슬라이싱해서 원하는 자료를 캐치할 때
    - 이 때 내가 잡은 기준 문자(특정한 문자)의 인덱스를 찾을 때 처음 위치, 그 다음 위치, ... 순으로 찾는 코드를 짤 때 자주 발생했음
# 성공 한 경우(사실 이것도 약간 부족)
a='banana'
for i in range(len(a)):
    b=a.index('a',i)
    print(i,b)
  • 오류 발생 이유: 내장함수 index의 특징으로 찾으려는 문자열에서 찾고자하는 문자열이 없을 때 발생한다. 비슷한 함수로 find 함수의 경우 찾는 문자가 없을 때 -1이라는 값을 반환하지만 index의 경우 오류가 발생한다.
a='banana'
a.index('k')
  • 해결법: 위 처럼 간단한 경우 오류가 발생하는 이유를 알지만 for문이나 조금만 코드가 복잡해져도 코딩공부 초반에는 당황하기 마련이다. 오류가 무슨 오류인지만 잘 파악하는 습관을 들이자.
profile
안녕하세요

0개의 댓글