본문 바로가기

진리는어디에/Python

[Python] Python 3 struct.pack(): char format requires a bytes object of length 1

예전에 Python 2.x 버전에서 만들어 사용했던 프로그램을 최근에 다시 사용해야 하는 일이 있었습니다. 오랜만의 파이썬 작업이었던지라 환경을 새로 세팅하는 김에 3.x 버전의 파이썬을 설치하고 실행..했습니다만??

다음과 같은 오류가 나옵니다.

Python 3 struct.pack(): char format requires a bytes object of length 1

이게 무슨 말인가? "char 형식은 1 바이트 길이의 객체가 필요합니다"? 아니 이미 pack()함수의 인자로 넘어가는 것은 1byte가 아닐 수 없는 영문 글자 한 글자 인데요.

data = 'c'
struct.pack('c', data)

그래서 찾아 보았습니다..뭐가 문제인지.

stackoverflow.com/questions/31551922/python-3-struct-pack-char-format-requires-a-bytes-object-of-length-1/61992926#61992926

파이썬 2.7 까지는 str이나 bytes나 같은 타입으로 취급되었지만 3.x 부터는 아래와 같이 인코딩이 지정된 bytes 오브젝트를 넘겨 줘야 한답니다.

data = 'c'
struct.pack('c', bytes(data, "utf-8"))

큰일이네요...

파이썬 버전 간에 호환이 안되요..pack을 쓸려면 2.x를 선택 하든 3.x를 선택하든 해야만 해요.

모든 시스템을 일괄 업데이트 할수 없으니 어쩔수 없이 이번엔 2.x으로 돌아가야 겠네요.

부록 1. 같이 읽으면 좋은 글

유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!