首页 > 解决方案 > Python TypeError:无法解压不可迭代的布尔对象

问题描述

TypeError: cannot unpack non-iterable bool object当我尝试搜索列表时,我得到了。当我返回一个布尔值和我正在搜索的项目的索引值时。

def name_ser(name):
    found = False
    for i in range(len(names)):
        if names[i] == name:
            found = True
            return found, names.index(name)
        else:
            found = False
            return found,None


def main_menu():
    print('Welcome!\nPlease Choose from the following options...')
    print('1: Create an account\n2: Login ')
    opt = int(input('Enter Your Choice: '))
    if opt == 1:
        name_search = input('Enter Name... ')
        found, _ = name_ser(name_search)
        if found == True:
            print("Account Already excites!")
        elif found == False & len(names) == 0:
            acc_creation(name_search)
            print('Account created!')

错误:

    Traceback (most recent call last):
  File "/Users/darkmbs/VS-Code/FirstPythonProject/accounts.py", line 100, in <module>
    main_menu()
  File "/Users/darkmbs/VS-Code/FirstPythonProject/accounts.py", line 77, in main_menu
    found, _ = name_ser(name_search)
TypeError: cannot unpack non-iterable NoneType object

标签: pythonlist

解决方案


name_ser可以返回 3 个不同的对象。

def name_ser(name):
    found = False
    for i in range(len(names)):
        if names[i] == name:
            found = True
            return found, names.index(name)     <== returns 2-tuple
        else:                                   <== if name[0] doesn't match,
            found = False                           executes immediately
            return found                        <== returns boolean
                                                <== if names is empty, returns None

您需要一致的返回类型。但实际上,这个功能根本不应该存在。它试图返回nameinnames或的索引Falsestr.find差不多就是这样。

def main_menu():
    print('Welcome!\nPlease Choose from the following options...')
    print('1: Create an account\n2: Login ')
    opt = int(input('Enter Your Choice: '))
    if opt == 1:
        name_search = input('Enter Name... ')
        if name_search in names:
            print("Account Already exists!")
        else:
            acc_creation(name_search)
            print('Account created!')

name_ser在添加帐户之前,我还删除了为空的支票。我认为如果只有一个人可以创建一个帐户会很奇怪。


推荐阅读