LoginSignup
3
4

More than 5 years have passed since last update.

Python2のchr()がPython3では使えないという話

Last updated at Posted at 2018-08-21

chr()関数の挙動の2と3での違い?

きっかけはchr(03)という表記がPython2のコードにあったことだった。
これはPython3ではエラーになる。

03の0ってなんやねん

頂いたコメントによると03の0とは8進数を表すための前置きのようである。(どうもありがとうございます。)
0x1aとか0b0110の仲間だったのか。

Python2では使えるこの表記も

>>> chr(03)
'\x03'
>>> chr(3)
'\x03'

Python3では叱られる。正確には0o3と書く必要がありそうだ。

>>> chr(3)
'\x03'
>>> chr(03)
  File "<stdin>", line 1
    chr(03)
         ^
SyntaxError: invalid token

数値をバイトに変換する関数としての違い

ここの記述によるとPython2ではchr()を数値からバイトへの変換に用いれたが,Python3ではそれはbytesという関数がそれを担っているらしい。

したがって,Python2で

>>> ''.join(chr(97))
'a'

と書いていたプログラムはPython3では

>>> bytes([97])
b'a'

というリストの形式で書かねばならないらしい。なお前についているbはバイト列であることを示すbである。

今まではencode()で対処してたりしていたが,類似の事例からきちんとシリアル送信の文脈ではchr()の代わりにbyte([])を用いたほうが良さそうである。

3
4
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4