이 에러는 아는 사람에게는 너무 쉽고 해결하기에 간단한 것이지만 모르면 삽질하기 쉬운 에러입니다.
참고를 위해서 포스팅합니다.
파이썬에서 문자열을 다루다 보면 이런 에러가 나올 때가 있습니다.
TypeError: a bytes-like object is required, not ‘str’
이 에러는 사용하려고 하는 곳에는 bytes-likes 오브젝트가 필요하니 str 타입을 넣지 말고 bytes 타입의 변수를 넣으라는 뜻입니다.
즉 bytes 타입의 변수를 전달해줘야 하는 곳에 str 타입을 줬기 때문입니다.
이 에러는 DB나 다른 플랫폼, 시스템에서 당겨온 데이터안의 문자열을 처리하다보면 만날 때가 있습니다.
bytes와 str은 다음과 같은 관계가 있습니다. 바꾸는 방법입니다.
- str –> 디코딩 –> bytes
- bytes –> 인코딩 –> str
코드로 바꾸면 이렇게 하면 됩니다.
text = "안녕" # text는 str이 됩니다.
text_byte = text.encode('utf-8')
text_str = text_byte.decode('utf-8')
에러메세지에 bytes라는 단어가 보이면 대부분 문자열 인코딩, 디코딩과 관련이 있을 것이라고 기억하면 됩니다.
VS code나 Pycharm 같은 개발툴에서 지원하는 힌트를 보고 어떤 타입의 변수가 필요한지 확인하고 적절한 에러를 처리해 주는 것도 좋은 습관입니다.