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

前端 未结 4 1236
-上瘾入骨i
-上瘾入骨i 2021-02-14 15:56

I am getting an error from this Python code:

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


        
相关标签:
4条回答
  • 2021-02-14 16:42

    What is the purpose of this

     names = list;
    

    ? Also, no ; required in Python.

    Do you want

     names = []
    

    or

     names = list()
    

    at the start of your program instead? Though given your particular code, there's no need for this statement to create this names variable since you do so later when you read data into it from your file.

    @JBernardo has already pointed out the other (and more major) problem with the code.

    0 讨论(0)
  • 2021-02-14 16:45

    I was faces this issue but after change object into str, problem solved. str(fname).isalpha():

    0 讨论(0)
  • 2021-02-14 16:53

    shuffle(names) is an in-place operation. Drop the assignment.

    This function returns None and that's why you have the error:

    TypeError: object of type 'NoneType' has no len()
    
    0 讨论(0)
  • 2021-02-14 16:54

    You don't need to assign names to list or [] or anything else until you wish to use it.

    It's neater to use a list comprehension to make the list of names.

    shuffle modifies the list you pass to it. It always returns None

    If you are using a context manager (with ...) you don't need to close the file explicitly

    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
    
    0 讨论(0)
提交回复
热议问题