やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

【python2と3の差異】3で`/`は実数除算。`//`で整数除算(TypeError: slice indices must be integers or None or have an __index__ method)

 配列のインデックス値を除算で求めたらエラー発生した。

2と3の差異

python2

>>> s = 'ABC'
>>> s[(1/1):]
'BC'

python3

>>> s = 'ABC'
>>> s[(1/1):]
TypeError: slice indices must be integers or None or have an __index__ method

 python3では/でなく//とすること。

>>> s = 'ABC'
>>> s[(1//1):]
'BC'

補足

 s[N:N]はスライスの意味。配列sの部分配列を取得する。1個目以降の2個(2,3個目)を取得する。このときインデックス(添字)は整数であるべき。今回の例ではs[1:]のように。

 しかしpython3では(1/1)という除算の結果が1.0になる。python2では1である。よってpython3のときは整数でなく実数が返ってしまうため、今回のエラーとなった。

 python3でpython2と同じ整数除算にするには/でなく//とすべき。2と3ではこのようなコードの違いが生じてしまう。

対象環境

$ uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux