0
import win32com.client
objSWbemServices = win32com.client.Dispatch(
    "WbemScripting.SWbemLocator").ConnectServer(".","root\cimv2")
for item in objSWbemServices.ExecQuery(
        "SELECT * FROM Win32_PnPEntity "):
    found=False
    for name in ('Caption','Capabilities '):
        a = getattr(item, name, None)
        if a is not None:
            b=('%s,' %a)
            if "Item" in b:
                print "found"
                found = True

            else:
                print "Not found"
                break

「見つかった」「見つからない」を一度だけ表示したい

4

4 に答える 4

1

これを行う別の方法は、関数を使用して、印刷した場所に return を置き換えることです。Python の関数が return に達すると実行を停止するという事実を利用できます。

def finder():
    objSWbemServices = win32com.client.Dispatch(
        "WbemScripting.SWbemLocator").ConnectServer(".","root\cimv2")
    for item in objSWbemServices.ExecQuery(
        "SELECT * FROM Win32_PnPEntity "):
        for name in ('Caption','Capabilities '):
            a = getattr(item, name, None)
            if a is not None:
                b=('%s,' %a)
                if "Item" in b:
                    return True # or return "Found" if you prefer
                else:
                    return False # or return "Not Found" if you prefer

found = finder()
print found
# or
print finder()
于 2012-07-28T17:32:17.323 に答える
0

画面?あなたは実行を意味すると思います。ブレークをelseステートメントの外側に置くだけです(内側 - aがNoneでない場合)。このように、a が none でない場合、"Item" が b にあるかどうかにかかわらず、ループは停止します。

for name in ('Caption','Capabilities '):
    a = getattr(item, name, None)
    if a is not None:
        b=('%s,' %a)
        if "Item" in b:
            print "found"
            found = True

        else:
            print "Not found"
        break

編集: warwaruk anser を参照してください

于 2012-07-28T12:53:13.410 に答える
0

次のように、「if」ケースの後に「break」を追加する必要があります。

for name in ('Caption','Capabilities '):
    a = getattr(item, name, None)
    if a is not None:
        b=('%s,' %a)
        if "Item" in b:
            print "found"
            found = True

            #added here
            break

        else:
            print "Not found"
            break

これは、"('Caption','Capabilities')" の繰り返しから抜け出します。

于 2012-07-28T12:51:11.443 に答える
0

break1 インデント レベルを上に移動します。

for name in ('Caption','Capabilities '):
    a = getattr(item, name, None)
    if a is not None:
        b=('%s,' %a)
        if "Item" in b:
            print "found"
            found = True
        else:
            print "Not found"

        break
于 2012-07-28T12:52:28.553 に答える