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

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

ただいまの
回答率

91.26%

  • Python

    4212questions

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

  • Python 3.x

    2767questions

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

  • import

    64questions

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

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

解決済

回答 2

投稿

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

Yamamachi_R

score 1

前提・実現したいこと

プログラム/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.26%

関連した質問

  • 解決済

    PHPのマジックメソッドのPython版

    PHPのメソッドに未定義な関数の呼び出しやプロパティの設定・取得が行われた時に、PHPから呼び出してくれる(いわゆるコールバックしてくれるマジックメソッドがあります。 #!/

  • 解決済

    SNS認証プラグインにおけるuninitialized constantエラー

    今、開発中のサイトでSNS認証機能を実装したいです。 ユーザー登録時パスワードが不要になったりとユーザーにも運営側にもメリットがあるとわかりましたので取り組んでいます! 前

  • 解決済

    Pythonのthreadingにおける、終了時の処理

    前提・実現したいこと Pythonを使って、動画や画像を表示するGUIを作っています。その中で、みなさまのご支援を頂ながらカメラの画像を取り込んで再生できるところまで来ました。

  • 解決済

    TwythonでのOAuth2認証について

     TwythonによるOAuth2認証について Twythonの存在を最近知り、試しております。 下記ページのソースを参照し、OAuth2認証を行うとしております。 htt

  • 解決済

    outputがでず、困っています。

    下記の質問で、outputを出そうとするとエラーになってしまいます。解決方法をご存知でしょうか。 ifname=="main":の後に、エラーがでてきます。。 A user

  • 解決済

    if:条件NG時の再計算

    質問事項 質問タイトルがわかり辛くすみません。 pythonの基礎勉強をしています。 下記補足に記したように、whileループの中にif文を2つ作り、各々ifの条件次第で、各々

  • 解決済

    複数行列への分割について

    Pythonによる複数行列の解析に関する質問です。 4行n列の.txtファイルを読み込んで分割を行いたいと考えています。 txtファイルは下記のような内容です。 531 1 1

  • 解決済

    python (psychopy) 余剰演算による表示を分岐を使用しています。同じ分岐が3回以上連続...

    前提 python (psychopy) 余剰演算による表示を分岐を使用しています。同じ分岐が3回以上連続しないようにしたいです。 今は分岐は完成しており、単純にランダムに回るよう

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

  • Python

    4212questions

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

  • Python 3.x

    2767questions

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

  • import

    64questions

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