TypeError: sequence item 5: expected str instance, NoneType found 해결Trouble shooting2023. 3. 29. 17:14
Table of Contents
반응형
OJT 프로젝트를 진행하는데 boto3로 s3를 조회해서 출력하고
Slack으로 보내는 실습을 진행하다가 다음과 같은 에러가 발생했다.
코드
# boto3 S3 클라이언트 생성
s3 = session.client('s3')
# S3 버킷 리스트 가져오기
response = s3.list_buckets()
# S3 버킷 이름 리스트 생성
bucket_name_list = []
# S3 버킷 리전 리스트 생성
bucket_region_list = []
# S3 버킷 생성 일자 리스트 생성
bucket_create_date_list = []
# 각 버킷의 정보를 출력
for bucket in response['Buckets']:
bucket_name = bucket['Name']
bucket_name_list.append(bucket['Name'])
creation_date = bucket['CreationDate']
bucket_create_date_list.append(creation_date.strftime("%Y-%m-%d %H:%M:%S"))
try:
bucket_region_list.append(s3.get_bucket_location(Bucket=bucket_name)['LocationConstraint'])
except s3.exceptions.ClientError as e:
if e.response['Error']['Code'] == 'AccessDenied':
bucket_region_list.append("AccessDenied")
else:
bucket_region_list.append("Unknown")
에러 코드
TypeError: sequence item 5: expected str instance, NoneType found
실습을 진행하다가 다음과 같은 NoneType 에러가 발생하였다.
bucket_region_list 리스트 내에 NoneType 값이 있다는 것을 알려주고 있는데
이유인 즉 get_bucket_location이라는 함수를 사용할 때
반환된 LocationConstraint 값이 None이 된 경우를 리스트에서 포함하고 있기 때문이다.
해결 방법
# boto3 S3 클라이언트 생성
s3 = session.client('s3')
# S3 버킷 리스트 가져오기
response = s3.list_buckets()
# S3 버킷 이름 리스트 생성
bucket_name_list = []
# S3 버킷 리전 리스트 생성
bucket_region_list = []
# S3 버킷 생성 일자 리스트 생성
bucket_create_date_list = []
# 각 버킷의 정보를 출력
for bucket in response['Buckets']:
bucket_name = bucket['Name']
bucket_name_list.append(bucket['Name'])
creation_date = bucket['CreationDate']
bucket_create_date_list.append(creation_date.strftime("%Y-%m-%d %H:%M:%S"))
try:
location = s3.get_bucket_location(Bucket=bucket_name)['LocationConstraint']
bucket_region_list.append(location if location is not None else "Unknown")
except s3.exceptions.ClientError as e:
if e.response['Error']['Code'] == 'AccessDenied':
bucket_region_list.append("AccessDenied")
else:
bucket_region_list.append("Unknown")
location = s3.get_bucket_location(Bucket=bucket_name)['LocationConstraint']
bucket_region_list.append(location if location is not None else "Unknown")
다음과 같이 bucket_region_list에 값을 추가하기 전에 반환된 LocationConstraint 값을 확인하고
None일 경우 "Unknown"이나 다른 값을 할당하여 처리하면 된다.
오류가 발생하지 않고 정상적으로 출력이 되는 모습
반응형
'Trouble shooting' 카테고리의 다른 글
@__Evening :: Good Evening
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!