关于Windows:Python:TypeError:’int’对象不可迭代-迭代dict时

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]