2013-03-02 2 views
0

Новое на python, писал это около часа. Google docs api и примеры замечательные. Я могу подключать и создавать файлы и т. Д. Я хочу сделать резервную копию всех моих файлов на диске Google, поэтому попробовал использовать os.walk и столкнулся с постоянной ошибкой отступа, которую я не понимаю.ошибка отладки python

#!/usr/bin/python 

import httplib2 
import pprint 
from apiclient.discovery import build 
from apiclient.http import MediaFileUpload 
from oauth2client.client import OAuth2WebServerFlow 
from oauth2client.client import Credentials 
import os 
import sys 

rootdir = sys.argv[1] 

CLIENT_ID = 'MYCLIENT ID' 
CLIENT_SECRET = 'MY SECRET ID' 
OAUTH_SCOPE = 'https://www.googleapis.com/auth/drive' 

# Redirect URI for installed apps 
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob' 

json_creds = open('backup_credentials.json', 'r').read() 
credentials = Credentials.new_from_json(json_creds) 
# 
# Create an httplib2.Http object and authorize it with our credentials 
http = httplib2.Http() 
http = credentials.authorize(http) 
drive_service = build('drive', 'v2', http=http) 

#Here is where the problem starts 
for root, subFolders, files in os.walk(rootdir): 
    for filename in files: 
     filepath = os.path.join(root, filename) 
     print (filepath) 
     media_body = MediaFileUpload(filepath, mimetype='text/plain', resumable=True) 
     body = {'title': filename,'description': 'A test document','mimeType': 'text/plain'} 
     file = drive_service.files().insert(body=body, media_body=media_body).execute() 
     pprint.pprint(file) 

Ошибка обижая является строка файла = ...

Фактическая ошибка

File "./quickstart.py", line 59 
    file = drive_service.files().insert(body=body, media_body=media_body).execute() 
                      ^
IndentationError: unindent does not match any outer indentation level 
+0

Ваш отступ выключен после 'body = {' –

+4

Не смешивайте вкладки и пробелы. [PEP 8] (http://www.python.org/dev/peps/pep-0008/#tabs-or-spaces) говорит: «Никогда не смешивайте вкладки и пробелы. Самый популярный способ отступов Python - это пробелы 2. Самый популярный способ - только с вкладками. Код с отступом со смесью вкладок и пробелов должен быть преобразован в использование пробелов исключительно. ** При вызове интерпретатора командной строки Python с опцией -t он выдает предупреждения о коде что незаконно смешивает вкладки и пробелы. ** При использовании -tt эти предупреждения становятся ошибками. Эти варианты очень рекомендуются! " –

ответ

6

Вы

body = { 
    'title': filename, 
    'description': 'A test document', 
    'mimeType': 'text/plain' 
    } 
    file = drive_service.files().insert(body=body, media_body=media_body).execute() 
    pprint.pprint(file) 

, когда вы должны иметь:

body = { 
    'title': filename, 
    'description': 'A test document', 
    'mimeType': 'text/plain' 
    } 
    file = drive_service.files().insert(body=body, media_body=media_body).execute() 
    pprint.pprint(file) 

Обратите внимание, что линия file = должна иметь отступ на том же уровне, что и линия «выше» с отступом (body = ...).

+0

Спасибо. На самом деле попытка вставить код в stackoverflow ввернула оригинальный отступ. Если есть простой способ вставить код python, это было бы здорово. У меня было это так, но это все еще не сработало. Поэтому я только что объединил все содержимое тела = {} в одну строку, и теперь я в порядке. В python, если вы собираетесь делать несколько строк, например, в теле, вам нужно избегать этого или делать что-то особенное, или это испортит ваше idention? – glacierDiscomfort

+0

@ glacierDiscomfort - разбить его на несколько строк, как это должно быть хорошо. В python любые незавершенные фигурные скобки, скобки и скобки автоматически преобразуются в одну строку. – mgilson

+0

[Неявное объединение строк] (http://docs.python.org/2/reference/lexical_analysis.html#implicit-line-joining) объясняет, что подробно упоминал Мэйлсон. –

 Смежные вопросы

  • Нет связанных вопросов^_^