Python:TypeError:“ int”对象不可迭代-迭代dict时

时间:2019-11-20 12:40:48

标签: python windows list dictionary

我正在尝试获取Windows拥有的本地用户列表。

我发现可以使用win32net.NetUserEnum以字典的形式获取列表,但是,由于我只需要用户名,因此我试图从dict中获取该信息,并且我设法做到了已经。

但是我仍然有一个问题,脚本正在返回此消息:

  

管理员回溯(最近一次拨打电话):来宾文件   DefaultAccount中的“ D:/QUIZ/OCRLAB/orissupportaut.py”,第9行       for listausers [i]中的用户:userjohn TypeError:'int'对象不是可迭代的teste UtilityAccount

有谁知道为什么会这样吗?

谢谢

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"))

3 个答案:

答案 0 :(得分:2)

这符合您的要求吗?使用isinstance而不是检查类型的值。之所以出现此错误,是因为NetUserEnum返回了一个由用户字典和一些附加值(整数)组成的列表,如here所述。

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"))

您也可以通过切片列表来查看字典本身。

for user in listausers[0]:
    print(user.get("name"))

答案 1 :(得分:1)

基于CDJB的答案,我会将所有内容压缩为简单的内容:

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]

答案 2 :(得分:-1)

我找到了解决方法..您在数组listausers中的最后一个索引是int值..并且您不能迭代int值。尝试将您的代码放入catch enter image description here