python3.4 "for loop" 中的缩进错误 (pyvmomi)

python3.4 indentation error in "for loop" (pyvmomi)

试图在循环中调用 python3.4 class 方法。 但是得到这个“TabError: inconsistent use of tabs and spaces in indentation

我查看了 "vim" 和 "gedit/sublime" 中的代码,它们没有显示明显的错误。

难道不是缩进而是其他错误?

谢谢。

$ cat pyvmomi-loop.py 
from __future__ import (absolute_import, division,
                        print_function, unicode_literals)
from builtins import *
import atexit
import sys
sys.path.insert(0, '/usr/lib/python2.7/site-packages')
import pyVmomi
import argparse
import atexit
import itertools
from pyVim.connect import SmartConnect, Disconnect
import humanize 
from pyVim import connect
from pyVmomi import vmodl
from pyVmomi import vim

## cred
host="1.2.3.4"
user="aa\bb"
password="$!@DD"
port=443

## Ignore certificate error
import ssl
try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    pass
else:
    print ("Ignoring SSL Error")
    ssl._create_default_https_context = _create_unverified_https_context

## Fetch id an dpw

def GetArgs():

    parser = argparse.ArgumentParser(
        description='Process args for retrieving all the Virtual Machines')
    parser.add_argument('-s', '--host', required=True, action='store',
                        help='Remote host to connect to')
    parser.add_argument('-o', '--port', type=int, default=443, action='store',
                        help='Port to connect on')
    parser.add_argument('-u', '--user', required=True, action='store',
                        help='User name to use when connecting to host')
    parser.add_argument('-p', '--password', required=False, action='store',
                        help='Password to use when connecting to host')
    args = parser.parse_args()
    return args


## Method to fetch VM info

def printHost(host):

    try:
        summary = host.summary
        stats = summary.quickStats
        hardware = host.hardware
        cpuUsage = stats.overallCpuUsage
        memoryCapacity = hardware.memorySize
        memoryCapacityInMB = hardware.memorySize/MBFACTOR
        memoryUsage = stats.overallMemoryUsage
        freeMemoryPercentage = 100 - (
            (float(memoryUsage) / memoryCapacityInMB) * 100
        )
        print ("--------------------------------------------------")
        print ("Host name: ", host.name)
        print ("Host CPU usage: ", cpuUsage)
        print ("Host memory capacity: ", humanize.naturalsize(memoryCapacity,
                                                             binary=True))
        print ("Host memory usage: ", memoryUsage / 1024, "GiB")
        print ("Free memory percentage: " + str(freeMemoryPercentage) + "%")
        print ("--------------------------------------------------")
    except Exception as error:
        print ("Unable to access information for host: ", host.name)
        print (error)
        pass



## Main method

def main():

    # argsCred = GetArgs()

    try:
        service_instance = connect.SmartConnect(host=host,
                                                user=user,
                                                pwd=password,
                                                port=port,
                                                )

## What to do when exiting
        atexit.register(connect.Disconnect, service_instance)

##Content object
        content = service_instance.RetrieveContent()

        container = content.rootFolder  # starting point to look into
        viewType = [vim.VirtualMachine]  # object types to look for
        recursive = True  # whether we should look into it recursively

## Create a view
        containerView = content.viewManager.CreateContainerView(
            container, viewType, recursive)

## Loop through all obhects to return name and VMware tools version
        children = containerView.view
        for child in children:
            if child.summary.guest is not None:
                try:
                    tools_version = child.summary.guest.toolsStatus
                            osFam = child.summary.guest.guestId
                    print("VM: {}, VMware-tools: {}".format(child.name, tools_version))
                        print("VM: {}, OS Fam: {}".format(child.name, osFam))
                except:
                    print("Vmware-tools: None")




    except vmodl.MethodFault as error:
        print("Caught vmodl fault : " + error.msg)
        return -1

    return 0

## Start program
if __name__ == "__main__":
    main()

这段代码有缩进问题。

改变

for child in children: if child.summary.guest is not None: try: tools_version = child.summary.guest.toolsStatus osFam = child.summary.guest.guestId print("VM: {}, VMware-tools: {}".format(child.name, tools_version)) print("VM: {}, OS Fam: {}".format(child.name, osFam)) except: print("Vmware-tools: None")

for child in children: if child.summary.guest is not None: try: tools_version = child.summary.guest.toolsStatus osFam = child.summary.guest.guestId print("VM: {}, VMware-tools: {}".format(child.name, tools_version)) print("VM: {}, OS Fam: {}".format(child.name, osFam)) except: print("Vmware-tools: None")

如果那是你的整个 .py 文件,错误在第 114 和 116 行。 不要复制粘贴此代码,因为可能会有太多空格。只需缩进我提到的行中的代码即可。

编辑:在 vim 或 gedit 或其他文本编辑器中编写代码不是一个好习惯。看看Pycharm :)