2017-03-22 18 views
0

試圖在循環中調用python3.4類方法。 但是得到這個「TabError: inconsistent use of tabs and spaces in indentation「for循環」(pyvmomi)中的python3.4縮進錯誤

我在「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="[email protected]" 
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() 

回答

0

此代碼有縮進問題。

變化

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

+0

那是整個py文件。但是你看到其他縮進可能在這個地方錯誤地標記縮進嗎?謝謝! – SndLt

+0

你對vim的看法只不過是一個壞主意。你應該刪除它,因爲它不相關。 –

+0

剛剛得到了pycharm。我相信這會很有幫助。非常感謝! – SndLt