質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

13249閲覧

'NoneType' object has no attributeのエラーについて

zunki

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/18 14:34

googlefitで保存されている歩数データを取ってきたいと思っています。
以下のサイトを参考にしていたところエラーが出てきてしまい、その解決方法が分かりません。

https://qiita.com/kusunamisuna/items/669fa324d4612dfdd7bf

エラーは以下の通りです。
Traceback (most recent call last):
File "googlefitdata.py", line 45, in <module>
http = credentials.authorize(http)
AttributeError: 'NoneType' object has no attribute 'authorize'

このエラーはNoneに対してアクセスしようとしているため起こるそうなのですが、どこがNoneなのかすらわかっていない状況です。
ご多忙の中大変恐縮ですが、どなたか教えていただけたら大変助かります。

import os import json import httplib2 import requests import time from datetime import datetime, timedelta from apiclient.discovery import build from oauth2client.client import OAuth2WebServerFlow, flow_from_clientsecrets from oauth2client.file import Storage OAUTH_SCOPE = 'https://www.googleapis.com/auth/fitness.activity.read' DATA_SOURCE = "derived:com.google.step_count.delta:com.google.android.gms:estimated_steps" REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob' CREDENTIALS_FILE = "./secret/credentials" credentials = "" if os.path.exists(CREDENTIALS_FILE): credentials = Storage(CREDENTIALS_FILE).get() else: #flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI) flow = flow_from_clientsecrets( # API有効化時に取得したOAuth用のJSONファイルを指定 './secret/oauth2.json', # スコープを指定 scope=OAUTH_SCOPE, # ユーザーの認証後の、トークン受け取り方法を指定(後述) redirect_uri=REDIRECT_URI) authorize_url = flow.step1_get_authorize_url() print('下記URLをブラウザで起動してください。') print(authorize_url) code = input('Codeを入力してください: ').strip() credentials = flow.step2_exchange(code ) if not os.path.exists(CREDENTIALS_FILE): Storage(CREDENTIALS_FILE).put(credentials) # Create an httplib2.Http object and authorize it with our credentials http = httplib2.Http() http = credentials.authorize(http) fitness_service = build('fitness', 'v1', http=http) print(fitness_service)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

どこがNoneなのかすらわかっていない状況です。

エラーメッセージに書いてあります。

File "googlefitdata.py", line 45, in <module>

http = credentials.authorize(http)
AttributeError: 'NoneType' object has no attribute 'authorize'

credentialsNoneですね。

投稿2021/04/18 15:01

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zunki

2021/04/18 15:25

すみません 最後から3行目の >http = credentials.authorize(http) ここが原因ということでしょうか?
otn

2021/04/18 15:37 編集

そこでエラーが発見されたので、表示されています。 回答に書いたとおり、credentials の中身が None です。
jbpb0

2021/04/18 23:34 編集

質問者さん エラーが発生してるのはその行ですが、「credentials」の中身が「None」になっている原因は別の行です 「credentials」の中身は、下記の行で代入されてるはずですが、なぜかそれがうまくいってません credentials = Storage(CREDENTIALS_FILE).get() または credentials = flow.step2_exchange(code ) 上記の前者は2回目以降、後者は1回目に実行されますので、まずは、エラーが出てるのは上記どちらが実行された場合かを調べて、実行されてる方の行がなぜうまくいってないのかを調べてみてください 【追記】 2回目以降は、1回目の Storage(CREDENTIALS_FILE).put(credentials) で格納されたデータを使っているので、2回目以降にエラーが出てる場合も、その原因は1回目にあるのかもしれません
guest

0

自己解決

otn様・jbpb0様のアンサーで解決に導くことができました。

エラーの原因はcredentialの中身がNoneだったことで、これは私が

python

1if os.path.exists(CREDENTIALS_FILE):

の意味を「(CREDENTIALS_FILE)というフォルダの中が空だった場合」ということだと勘違いしていたからでした(本当の意味は「(CREDENTIALS_FILE)というフォルダが存在した場合」ということ)・

そのため、(CREDENTIALS_FILE)というフォルダを作成して中身が空の状態で置いており、

python

1if os.path.exists(CREDENTIALS_FILE): 2 credentials = Storage(CREDENTIALS_FILE).get()

(CREDENTIALS_FILE)が存在するので上の分岐に入ったが、肝心のファイルの中身は空だったためcredentialsの中身がNoneということになっていました。

本当にお二人ありがとうございました。

投稿2021/04/19 03:40

編集2021/04/19 03:52
zunki

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2021/04/19 03:47

> エラーの原因はcredentialの中身がNoneだったことで、 そのように繰り返し書いたのですが。。。
zunki

2021/04/19 03:52

すみません、名前が抜けていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問