10

この Python コードからエラーが発生します。

with open('names') as f:
    names = f.read()
    names = names.split('\n')
    names.pop(len(names) - 1)
    names = shuffle(names)
    f.close()

assert len(names) > 100

エラー:

Python: TypeError: object of type 'NoneType' has no len()

assert ステートメントがこのエラーをスローしています。何が間違っていますか?

4

4 に答える 4

22

shuffle(names)インプレース操作です。課題をドロップします。

この関数が返さNoneれるため、エラーが発生します。

TypeError: object of type 'NoneType' has no len()
于 2012-07-06T03:24:00.273 に答える
5

使用するまで、または他のnamesものに割り当てる必要はありません。list[]

リスト内包表記を使用して名前のリストを作成する方が適切です。

shuffle渡すリストを変更します。常に戻りますNone

コンテキストマネージャー(with ...)を使用している場合は、ファイルを明示的に閉じる必要はありません。

from random import shuffle

with open('names') as f:
    names = [name.rstrip() for name in f if not name.isspace()]
    shuffle(names)

assert len(names) > 100
于 2012-07-06T03:33:35.853 に答える
3

これの目的は何ですか

 names = list;

? また、;Python では必要ありません。

欲しいですか

 names = []

また

 names = list()

代わりにプログラムの開始時に?特定のコードが与えられたとしてnamesも、後でファイルからデータを読み取るときにこの変数を作成するため、このステートメントでこの変数を作成する必要はありません。

@JBernardo は、コードに関する他の (そしてより大きな) 問題をすでに指摘しています。

于 2012-07-06T03:24:22.833 に答える