配列のインデックス値を除算で求めたらエラー発生した。
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ではこのようなコードの違いが生じてしまう。
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release
- Python 2.7.16
- Python 3.7.3
$ uname -a Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux