2017-03-03 11 views
-1

関数 "searchF"を再定義変数 "search"で他のファイルで呼び出そうとしていますが、関数呼び出しメインスレッドFileA.pyif __name__ == "__main__"で他のファイルから関数を呼び出す:

import FileB 

search = "stackoverflow"  
searchF(search) 

FileB.py if __name__ == "__main__":

from apiclient.discovery import build 
from apiclient.errors import HttpError 
from oauth2client.tools import argparser 

search = "Google"  
def searchF(search) 
    DEVELOPER_KEY = "REPLACE_ME" 
    YOUTUBE_API_SERVICE_NAME = "youtube" 
    YOUTUBE_API_VERSION = "v3" 

    def youtube_search(options): 
    youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, 
     developerKey=DEVELOPER_KEY) 

    search_response = youtube.search().list(
     q=options.q, 
     type="video", 
     part="id,snippet", 
     maxResults=options.max_results 
    ).execute() 

    search_videos = [] 

    for search_result in search_response.get("items", []): 
     search_videos.append(search_result["id"]["videoId"]) 
    video_ids = ",".join(search_videos) 

    video_response = youtube.videos().list(
     id=video_ids, 
     part='snippet, contentDetails' 
    ).execute() 

    videos = [] 

    for video_result in video_response.get("items", []): 
     videos.append("%s, (%s,%s)" % (video_result["snippet"]["title"], 
           video_result["contentDetails"], 
           video_result["contentDetails"])) 
    find = "licensedContent': True" 
    result = ', '.join(videos) 
    print find in result 

    if __name__ == "__main__": 
    argparser.add_argument("--q", help="Search term", default=search) 
    argparser.add_argument("--max-results", help="Max results", default=25) 
    args = argparser.parse_args() 

    try: 
     youtube_search(args) 
    except HttpError, e: 
     print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content) 
+3

"うまくいかない"というのは適切な問題文ではありません。あなたは*動作していないと仮定していますか?それは私にとってうまくいくはずです。 「メインスレッド」とは何ですか?あなたが実際に試したことがあれば、エラーは何ですか?それは重要な情報です。 –

+3

実際には、 'searchF'が定義されていないので、あなたのコードは' NameError'をスローします。しかし、これは 'FileB.py'の' if __name__ == "__main __": 'とは関係ありません。 'FileA.py'で' import FileB'を使用した場合、 'FileB.searchF'を使う必要があるからです。 –

答えて

1
if __name__ == "__main__": 

(非常に)簡体字lyが、それはそれはずっとより深い議論がhereを見つけることができるので、

>>> python FileA.py 

のように、端末から起動された場合、スクリプトは何をすべきかを意味し、置きます。しかし、あなたの輸入がうまくいかない理由ではありません。

貼り付けたコードから、あなたの問題はsearchFの機能と思われます。現時点では、FileA.pyスコープ(正確にはモジュールのシンボルテーブル)に定義されていません。それを呼び出そうとすると、それは単に存在しません。定義されていません。しかし、あなたはそうのようにそれを呼び出すことによって、それに到達することができます:

FileB.searchF(search) 

あなたがそうであるように関数を呼び出したい場合は、あなたがあなたのインポートを変更する必要があります。

from FileB import searchF 

あなたができるようになります。この道を接頭辞なしで関数に到達する。これについてもっと読むのに良い場所はthe docsです。

+0

私の質問に答えて、__nameが何をしているのかを説明していただきありがとうございます。私はPython 2.7を使用しています。あなたのサンプルを使用しています。実際にコンソールで何かを取得しています。 FileB.searchF(検索)を使用しているときにNameError:name 'FileB'が定義されていない – one2gov

+1

「FileB import searchF'からインポートを作成し、 'FileB.searchF(search ) '?もしそうなら、正しい方法は単に 'searchF(search)'を呼ぶだけです。つまり、インポートが 'import FileB'であれば、' FileB.searchF(search) 'のように関数を呼び出す必要があります。読み込みが 'FileB import searchF'から読み込まれた場合、関数呼び出しは' searchF(search) 'でなければなりません。 – cegas

+0

"print 'test'"でテストすると動作しますが、実際のコードでは結果はありません。このコードはスキップしたようです。 – one2gov

関連する問題