2015-11-27 92 views
2

我到底在干什么,我不知道我做了什么错误。只有标签,没有空间。我从本教程中获取该代码,http://cloudacademy.com/blog/google-prediction-api/。 (顺便说一下,我正在使用PyCharm进行开发)。Python - IndentationError:意想不到的缩进

错误消息

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/ZERO/GooglePredictionApi/google.py File "/Users/ZERO/GooglePredictionApi/google.py", line 72 api = get_prediction_api() ^IndentationError: unexpected indent

Process finished with exit code 1

示例代码

import httplib2, argparse, os, sys, json 
from oauth2client import tools, file, client 
from googleapiclient import discovery 
from googleapiclient.errors import HttpError 

#Project and model configuration 
project_id = '132567073760' 
model_id = 'HAR-model' 

#activity labels 
labels = { 
    '1': 'walking', '2': 'walking upstairs', 
    '3': 'walking downstairs', '4': 'sitting', 
    '5': 'standing', '6': 'laying' 
} 

def main(): 
    """ Simple logic: train and make prediction """ 
    try: 
     make_prediction() 
    except HttpError as e: 
     if e.resp.status == 404: #model does not exist 
      print("Model does not exist yet.") 
      train_model() 
      make_prediction() 
     else: #real error 
      print(e) 


def make_prediction(): 
    """ Use trained model to generate a new prediction """ 

    api = get_prediction_api() //error here 

    print("Fetching model.") 

    model = api.trainedmodels().get(project=project_id, id=model_id).execute() 

    if model.get('trainingStatus') != 'DONE': 
     print("Model is (still) training. \nPlease wait and run me again!") #no polling 
     exit() 

    print("Model is ready.") 

    """ 
    #Optionally analyze model stats (big json!) 
    analysis = api.trainedmodels().analyze(project=project_id, id=model_id).execute() 
    print(analysis) 
    exit() 
    """ 

    #read new record from local file 
    with open('record.csv') as f: 
     record = f.readline().split(',') #csv 

    #obtain new prediction 
    prediction = api.trainedmodels().predict(project=project_id, id=model_id, body={ 
     'input': { 
      'csvInstance': record 
     }, 
    }).execute() 

    #retrieve classified label and reliability measures for each class 
    label = prediction.get('outputLabel') 
    stats = prediction.get('outputMulti') 

    #show results 
    print("You are currently %s (class %s)." % (labels[label], label)) 
    print(stats) 


def train_model(): 
    """ Create new classification model """ 

    api = get_prediction_api() 

    print("Creating new Model.") 

    api.trainedmodels().insert(project=project_id, body={ 
     'id': model_id, 
     'storageDataLocation': 'machine-learning-dataset/dataset.csv', 
     'modelType': 'CLASSIFICATION' 
    }).execute() 


def get_prediction_api(service_account=True): 
    scope = [ 
     'https://www.googleapis.com/auth/prediction', 
     'https://www.googleapis.com/auth/devstorage.read_only' 
    ] 
    return get_api('prediction', scope, service_account) 


def get_api(api, scope, service_account=True): 
    """ Build API client based on oAuth2 authentication """ 
    STORAGE = file.Storage('oAuth2.json') #local storage of oAuth tokens 
    credentials = STORAGE.get() 
    if credentials is None or credentials.invalid: #check if new oAuth flow is needed 
     if service_account: #server 2 server flow 
      with open('service_account.json') as f: 
       account = json.loads(f.read()) 
       email = account['client_email'] 
       key = account['private_key'] 
      credentials = client.SignedJwtAssertionCredentials(email, key, scope=scope) 
      STORAGE.put(credentials) 
     else: #normal oAuth2 flow 
      CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json') 
      FLOW = client.flow_from_clientsecrets(CLIENT_SECRETS, scope=scope) 
      PARSER = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, parents=[tools.argparser]) 
      FLAGS = PARSER.parse_args(sys.argv[1:]) 
      credentials = tools.run_flow(FLOW, STORAGE, FLAGS) 

    #wrap http with credentials 
    http = credentials.authorize(httplib2.Http()) 
    return discovery.build(api, "v1.6", http=http) 


if __name__ == '__main__': 
    main() 

请指点。谢谢。

+1

''“”创建新的分类模型“”“'docstring缩进2个空格,它应该缩进4个。 –

+0

好吧 - 如果第72行出现“意外缩进”,则可能需要修复第72行的缩进,是吗。可能有一个选项卡应该有空格或(希望不是)反之亦然。 –

+0

在PyCharm应该是“将制表符转换为空格”函数 - http://stackoverflow.com/questions/11816147/pycharm-convert-tabs-to-spaces-automatically – furas

回答

0

变化

def train_model(): 
    """ Create new classification model """ 

    api = get_prediction_api() 

def train_model(): 
    """ Create new classification model """ 

    api = get_prediction_api() 
+0

我得到了print(“Creating new Model。”) ^ IndentationError:unindent不匹配任何外部缩进级别。 –

+0

请勿复制和粘贴我写的内容,因为空格和制表符可能会混在一起。在你的代码中修改缩进:如果你一直使用标签,那么在“”“创建新的分类模型”“”之前插入一个标签。顺便说一句:好的风格是因此使用四个空间缩进而不是制表符。 – elzell

0

有许多缩进错误,试试这个:

import httplib2 
import argparse 
import os 
import sys 
import json 
from oauth2client import tools, file, client 
from googleapiclient import discovery 
from googleapiclient.errors import HttpError 

# Project and model configuration 
project_id = '132567073760' 
model_id = 'HAR-model' 

# activity labels 
labels = { 
    '1': 'walking', '2': 'walking upstairs', 
    '3': 'walking downstairs', '4': 'sitting', 
    '5': 'standing', '6': 'laying' 
} 


def main(): 
    """ Simple logic: train and make prediction """ 
    try: 
     make_prediction() 
    except HttpError as e: 
     if e.resp.status == 404: # model does not exist 
      print("Model does not exist yet.") 
      train_model() 
      make_prediction() 
     else: # real error 
      print(e) 


def make_prediction(): 
    """ Use trained model to generate a new prediction """ 

    api = get_prediction_api() 

    print("Fetching model.") 

    model = api.trainedmodels().get(project=project_id, id=model_id).execute() 

    if model.get('trainingStatus') != 'DONE': 
     # no polling 
     print("Model is (still) training. \nPlease wait and run me again!") 
     exit() 

    print("Model is ready.") 

    """ 
    #Optionally analyze model stats (big json!) 
    analysis = api.trainedmodels().analyze(project=project_id, id=model_id).execute() 
    print(analysis) 
    exit() 
    """ 

    # read new record from local file 
    with open('record.csv') as f: 
     record = f.readline().split(',') # csv 

    # obtain new prediction 
    prediction = api.trainedmodels().predict(project=project_id, id=model_id, body={ 
     'input': { 
      'csvInstance': record 
     }, 
    }).execute() 

    # retrieve classified label and reliability measures for each class 
    label = prediction.get('outputLabel') 
    stats = prediction.get('outputMulti') 

    # show results 
    print("You are currently %s (class %s)." % (labels[label], label)) 
    print(stats) 


def train_model(): 
    """ Create new classification model """ 
    api = get_prediction_api() 
    print("Creating new Model.") 
    api.trainedmodels().insert(project=project_id, body={ 
     'id': model_id, 
     'storageDataLocation': 'machine-learning-dataset/dataset.csv', 
     'modelType': 'CLASSIFICATION' 
    }).execute() 


def get_prediction_api(service_account=True): 
    scope = [ 
     'https://www.googleapis.com/auth/prediction', 
     'https://www.googleapis.com/auth/devstorage.read_only' 
    ] 
    return get_api('prediction', scope, service_account) 


def get_api(api, scope, service_account=True): 
    """ Build API client based on oAuth2 authentication """ 
    STORAGE = file.Storage('oAuth2.json') # local storage of oAuth tokens 
    credentials = STORAGE.get() 
    # check if new oAuth flow is needed 
    if credentials is None or credentials.invalid: 
     if service_account: # server 2 server flow 
      with open('service_account.json') as f: 
       account = json.loads(f.read()) 
       email = account['client_email'] 
       key = account['private_key'] 
      credentials = client.SignedJwtAssertionCredentials(
       email, key, scope=scope) 
      STORAGE.put(credentials) 
     else: # normal oAuth2 flow 
      CLIENT_SECRETS = os.path.join(
       os.path.dirname(__file__), 'client_secrets.json') 
      FLOW = client.flow_from_clientsecrets(CLIENT_SECRETS, scope=scope) 
      PARSER = argparse.ArgumentParser(
       description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, parents=[tools.argparser]) 
      FLAGS = PARSER.parse_args(sys.argv[1:]) 
      credentials = tools.run_flow(FLOW, STORAGE, FLAGS) 

    # wrap http with credentials 
    http = credentials.authorize(httplib2.Http()) 
    return discovery.build(api, "v1.6", http=http) 


if __name__ == '__main__': 
    main() 
0
import httplib2, argparse, os, sys, json 
from oauth2client import tools, file, client 
from googleapiclient import discovery 
from googleapiclient.errors import HttpError 

#Project and model configuration 
project_id = '132567073760' 
model_id = 'HAR-model' 

#activity labels 
labels = { 
    '1': 'walking', '2': 'walking upstairs', 
    '3': 'walking downstairs', '4': 'sitting', 
    '5': 'standing', '6': 'laying' 
} 

def main(): 
    """ Simple logic: train and make prediction """ 
    try: 
     make_prediction() 
    except HttpError as e: 
     if e.resp.status == 404: #model does not exist 
      print("Model does not exist yet.") 
      train_model() 
      make_prediction() 
     else: #real error 
      print(e) 


def make_prediction(): 
    """ Use trained model to generate a new prediction """ 

    api = get_prediction_api() //error here 

    print("Fetching model.") 

    model = api.trainedmodels().get(project=project_id, id=model_id).execute() 

    if model.get('trainingStatus') != 'DONE': 
     print("Model is (still) training. \nPlease wait and run me again!") #no polling 
     exit() 

    print("Model is ready.") 

    """ 
    #Optionally analyze model stats (big json!) 
    analysis = api.trainedmodels().analyze(project=project_id, id=model_id).execute() 
    print(analysis) 
    exit() 
    """ 

    #read new record from local file 
    with open('record.csv') as f: 
     record = f.readline().split(',') #csv 

    #obtain new prediction 
    prediction = api.trainedmodels().predict(project=project_id, id=model_id, body={ 
     'input': { 
      'csvInstance': record 
     }, 
    }).execute() 

    #retrieve classified label and reliability measures for each class 
    label = prediction.get('outputLabel') 
    stats = prediction.get('outputMulti') 

    #show results 
    print("You are currently %s (class %s)." % (labels[label], label)) 
    print(stats) 


def train_model(): 
    """ Create new classification model """ 

    api = get_prediction_api() 

    print("Creating new Model.") 

    api.trainedmodels().insert(project=project_id, body={ 
     'id': model_id, 
     'storageDataLocation': 'machine-learning-dataset/dataset.csv', 
     'modelType': 'CLASSIFICATION' 
    }).execute() 


def get_prediction_api(service_account=True): 
    scope = [ 
     'https://www.googleapis.com/auth/prediction', 
     'https://www.googleapis.com/auth/devstorage.read_only' 
    ] 
    return get_api('prediction', scope, service_account) 


def get_api(api, scope, service_account=True): 
    """ Build API client based on oAuth2 authentication """ 
    STORAGE = file.Storage('oAuth2.json') #local storage of oAuth tokens 
    credentials = STORAGE.get() 
    if credentials is None or credentials.invalid: #check if new oAuth flow is needed 
     if service_account: #server 2 server flow 
      with open('service_account.json') as f: 
       account = json.loads(f.read()) 
       email = account['client_email'] 
       key = account['private_key'] 
      credentials = client.SignedJwtAssertionCredentials(email, key, scope=scope) 
      STORAGE.put(credentials) 
     else: #normal oAuth2 flow 
      CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json') 
      FLOW = client.flow_from_clientsecrets(CLIENT_SECRETS, scope=scope) 
      PARSER = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, parents=[tools.argparser]) 
      FLAGS = PARSER.parse_args(sys.argv[1:]) 
      credentials = tools.run_flow(FLOW, STORAGE, FLAGS) 

    #wrap http with credentials 
    http = credentials.authorize(httplib2.Http()) 
    return discovery.build(api, "v1.6", http=http) 


if __name__ == '__main__': 
    main() 

您已经对 “” 错缩进”创建新的分类模型“”“” 只需看here即可了解更多关于python缩进编码的信息。

0

也许故障是这样的:

高清train_model(): “”“创建新的分类模型‘’”

api = get_prediction_api() 

print("Creating new Model.") 

应进行适当的缩进,但其他人指出其他缩进错误,只要在您编码时检查您的缩进,否则可能会弄得乱七八糟,找出错误的位置。

+0

两者有什么区别? – niyasc

+0

niyasc哈哈,没有太多,但网站正在使我无法显示正确的缩进无论如何,我编辑注意,缩进不正确,应该纠正,这就是全部 – AbdulWahid

3

这是来自CloudAcademy的Alex。

你可以找到更新的要点在这里:https://gist.github.com/alexcasalboni/cf11cc076ad70a445612

正如其他人所指出的,错误是由于不一致的缩进。这是一个general Python problem,与Google Prediction API或机器学习无关。

每当你发现自己处于这种情况下,我会建议你只需按照PEP8 conventions的方式将每个硬标签转换为空格。正如this answer正确建议,您可以通过tabnanny或通过正确配置您的代码编辑器来解决问题。

相关问题