1. ホーム
  2. python

python error TypeError: 'NoneType' object is not subscriptable Solution

2022-02-18 22:11:03
<パス

Pythonを書いているときにこのエラーが発生し、オンラインチュートリアルの解決策は、ほとんど常に - "この変数を再定義"で、私は混乱しているように見えました。

return Noneメソッドを変数に代入して操作していたことがわかったので、以下はそのコードです。

    for i in range(2000):
        read_lines = random.shuffle(read_lines) # Here's the problem
        print(read_lines)


一見すると問題ないように見えますが、実行するとエラーが報告されます

>>TypeError: 'NoneType' object is not subscriptable


その後、random.shuffleがNoneを返す関数であることがわかりましたが、read_linesに代入してしまったため、read_linesの印刷も含め、read_linesを操作すると常にこのエラーが発生するようになってしまいました。

これはランダムライブラリのコードです(return Noneと書かれているコメントを参照)。

    def shuffle(self, x, random=None):
        """
        Shuffle list x in place, and return None.

        Optional argument random is a 0-argument function returning a
        optional argument random is a 0-argument function returning a random float in [0.0, 1.0); if it is the default None, the
        standard random.random will be used.

        """

        if random is None:
            randbelow = self._randbelow
            for i in reversed(range(1, len(x))):
                # pick an element in x[:i+1] with which to exchange x[i]
                j = randbelow(i+1)
                x[i], x[j] = x[j], x[i]
        else:
            _int = int
            for i in reversed(range(1, len(x))):
                # pick an element in x[:i+1] with which to exchange x[i]
                j = _int(random() * (i+1))
                x[i], x[j] = x[j], x[i]



解決方法

上の行の代入文を変更するだけです。

    for i in range(2000):
        random.shuffle(read_lines)
        print(read_lines)
        content_list = []