开发者

TypeError: argument of type 'NoneType' is not iterable in python

开发者 https://www.devze.com 2023-03-21 11:05 出处:网络
I am trying to get the VM size of a running process and using the following simple script. Here initially I am trying to get the reference of that process. But getting the error as --

I am trying to get the VM size of a running process and using the following simple script. Here initially I am trying to get the reference of that process. But getting the error as --

if "DomainManager开发者_运维技巧" in c:
TypeError: argument of type 'NoneType' is not iterable

import wmi

computer = wmi.WMI ()

for process in computer.Win32_Process ():

      c = process.CommandLine
      if "DomainManager" in c:
        print c

Would you please let me know the reason.

Thanks, Rag


import wmi
computer = wmi.WMI ()

for process in computer.Win32_Process ():
    c = process.CommandLine
    if c is not None and "DomainManager" in c:
        print c

Notice the condition in the if statement:

if c is not None and "DomainManager in c":

This will check to see if c is valid before attempting to check if the given string is a substring of it.

Apparently, some processes have no CommandLine as far as WMI is concerned.


It appears

c = process.CommandLine

is setting c equal to None:

In [11]: "DomainManager" in None

TypeError: argument of type 'NoneType' is not iterable

I don't know anything about the Win32 API, so this is a complete guess, but you might try:

if c and "DomainManager" in c:


it means that c is None after the call to process.CommandLine. since c is None, it cannot be iterated over, so the ifstatement which follows, which iterate over c and tries to compare each items of c to 'DomainManager', cannot execute and throws an exception.


The error message indicates that process.CommandLine is returning None for some reason.

0

精彩评论

暂无评论...
验证码 换一张
取 消