본문 바로가기

AWS

[ERROR] TypeError: string indices must be integers (aws lambda, api gateway)

[ERROR] TypeError: string indices must be integers

이 에러가 뭐냐고?

너도 알고 나도 알고 다알지

인덱스에 integer가 아닌 다른걸 넣은거지

a=[2,3]

# a[0.5] -> error
# a['0'] -> error
print(a[0])

 

근데 지금 이걸로는 이해가 안돼!

 

 

선결론

다중배열이 dict 안에 dict이 아닌, dict안에 str형태이다.

event 객체가 json 형태를 받아서 사용할때 dict 형태가 아닌 str형태로 만들어서 그렇다

다시말해

event 객체

event={
 "body":{
   "no":2017036174,
   "name":"nsmchan"
 }
}

# EVENT BODY
# {'no': 2017036174, 'name': 'nsmchan'} 

# 이렇게 나와야하는데!!!
print(type(event["body"]))
# <class 'dict'>

# 이렇게 된다..!
print(type(event["body"]))
# <class 'str'>

 dict 안에 dict 구조

dict 안에 str 구조가 된것이다

 

 

상황

api gateway를 트리거로 aws lambda를 사용하는데
콘솔의 함수에서 테스트를 할때는 이상이없는데

 

api gateway에서 테스트를하면 다음과 같은 에러가 뜨고

{"message": "Internal server error"}
errorMessage": "string indices must be integers"

 

postman에서 테스트를 하면 다음과 같이 뜬다

{
"message": "Internal server error"
}

[ERROR] TypeError: string indices must be integers

 

 

 

 

해결

json형태를 띈 str 타입을 dict로 변환!!!  (str -> dict)

json.loads(변수)

 

return 해줄때는 json형태로!     (dict -> str)

json.dumps(변수)

 

 

 

 

항상 로그를 확인하면서 코드를 짜자!