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

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

ただいまの
回答率

91.05%

  • Python

    5138questions

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

  • Python 3.x

    3720questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • import

    72questions

    自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

【python】inportした定義が正常に認識されない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 103

Yamamachi_R

score 2

前提・実現したいこと

プログラム/Python初心者です

ログイン情報をkeysから読み込んでいます

keysに複数のログイン情報が入っていてdefで管理しています

発生している問題・エラーメッセージ

Traceback (most recent call last):
  File "E:\Python\Twitter\Twitter_RT-FV_bot-master\FV_bot.py", line 16, in <module>
    auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
NameError: name 'CONSUMER_KEY' is not defined

 main.py

from keys import *
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)

keys.py

def API1():
    name = "JellenaAdree"
    print (name)
    CONSUMER_KEY = ":::::"
    CONSUMER_SECRET = "::::"
    ACCESS_KEY = "921515617294860288-::::"
    ACCESS_SECRET = '::::'
    secret = "::::"
    FV_List = ["大学 冬休み source:twitter_for_iphone OR source:twitter_for_android"]
    print (CONSUMER_KEY)
    print (CONSUMER_SECRET)
def API2():
    省略 API1と同様
API1()

試した事

main.pyを実行すると print(name CONSUMER_KEY CONSUMER_SECRET)は正常に出力されます
その後 今回のエラーが出ます

素人見解

keysで複数アカウントを管理しています
defではなくClassを使うのか(?)

別スプリクトからの関数定義(defを使った物)は認識されないのかも
(でもなんでPrintは正常に行われているの??)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

(でもなんでPrintは正常に行われているの??)

まずmain.pyの1行目from keys import *によってkeys.pyが読み込まれます。
その際、最終行のAPI1()呼出により、API1関数が実行されています。
その結果、API1()関数内のprint (name)などが実行されるため、プリント出力されています。

次にmain.pyの2行目auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)においてCONSUMER_KEYは(有効なスコープ内に)定義されていないので未定義エラーが発生します。

keysで複数アカウントを管理しています
defではなくClassを使うのか(?)

簡便な解決法としては、以下のように、複数ユーザーの情報を辞書にまとめたものを返す関数を作ればよいでしょう。

keys.py

def getUsers():
    return { 'JellenaAdree':{'CONSUMER_KEY':'xxx_key','CONSUMER_SECRET':'xxx_secret',...},
             'Ann':{'CONSUMER_KEY ':'yyy_key','CONSUMER_SECRET':'yyy_secret',...} }

main.py

from keys import *
users = getUsers()

# ユーザー毎に処理する
user = users['JellenaAdree']
auth = tweepy.OAuthHandler( user['CONSUMER_KEY'], user['CONSUMER_SECRET'])
# 略

user = users['Ann']
auth = tweepy.OAuthHandler( user['CONSUMER_KEY'], user['CONSUMER_SECRET'])
# 略

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/21 14:43

    詳しい説明ありがとうございます
    (ベストアンサーを選んタイミングだったので申し訳ないです)

    帰りしだい参考にさせて頂いて状況報告をさせていただきます

    キャンセル

checkベストアンサー

0

変数のスコープについて知る必要があります。
https://qiita.com/yoichi22/items/8ae2ca180407a5ad5a6d


解決法はいくつかありますが、このままの雰囲気を保ったものを2つだけ。

パターン1:keys.py

api_key = 'API1'
if api_key == 'API1':
    name = ...
    CONSUMER_KEY = ...
elif api_key == 'API2':
    name = ...

パターン2:keys.py

def API1():
    name = ...
    CONSUMER_KEY = ...
    ...
    return name, CONSUMER_KEY, .....
def API2():
    ...

name, CONSUMER_KEY, ... = API1()

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/21 13:55

    回答が早くてびっくりしました

    リンク先を見て修正してみます

    キャンセル

  • 2017/12/21 14:18

    追記失礼します

    リンク先の説明ですがprintに関する問題解決のようです

    今回の自作変数が認識されないのに必要な知識でしょうか?

    応用するほど知識がなく余裕がないので質問させていただきます

    キャンセル

  • 2017/12/21 14:20

    解決法を2つ追記しました。
    変数のスコープが外に出てこないことが問題です。

    if文を使って切り替えるか、返り値として外のスコープで受け止めてあげるとうまくいきます。

    キャンセル

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

  • ただいまの回答率 91.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    5138questions

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

  • Python 3.x

    3720questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • import

    72questions

    自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。