Python: TypeError: 'int' object is not iterable - when iterating a dict
我正在尝试获取Windows拥有的本地用户列表。
我想通了,我可以使用win32net.NetUserEnum以字典的形式获取列表,但是,由于我只需要用户名,因此我试图从dict中获取该信息,并且已经做到了。
但是我仍然有问题,脚本正在返回此消息:
Administrator Traceback (most recent call last): Guest File
"D:/QUIZ/OCRLAB/orissupportaut.py", line 9, in DefaultAccount
for user in listausers[i]: userjohn TypeError: 'int' object is not iterable teste UtilityAccount
任何人都知道为什么会这样吗?
谢谢
1 2 3 4 5 6 7 8 9 10 11 12 13 | import win32api import win32net import win32netcon listausers = win32net.NetUserEnum(None,2) utilizadores= [] for i in range(len(listausers)): for user in listausers[i]: if type(user) == int: pass else: print(user.get("name")) |
这符合您的要求吗?使用isinstance而不是检查类型的值。之所以出现此错误,是因为NetUserEnum返回一个包含用户字典和一些额外值(整数)的列表,如此处所述。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import win32api import win32net import win32netcon listausers = win32net.NetUserEnum(None,2) utilizadores= [] for i, users in enumerate(listausers): if not isinstance(users, int): for user in users: if isinstance(user, int): pass else: print(user.get("name")) |
您也可以通过切片列表来查看字典本身。
1 2 | for user in listausers[0]: print(user.get("name")) |
基于CDJB的答案,我会将所有内容压缩为简单的形式:
1 2 3 4 5 6 | import win32api import win32net import win32netcon listausers = win32net.NetUserEnum(None, 2)[0] # 0 to ignore the extra returned values. utilizadores = [user.get("name") for user in listausers] |