2016-06-14 47 views
0

我试图通过Youtube发布的以下代码获取YouTube API的数据。我还在print上添加了我的个人API密钥和括号,但代码无效。当我尝试在PyCharm中运行它时,我得到:Python 3.5 Youtube API按关键字搜索:SyntaxError在除外块

except HttpError, e: 
        ^
SyntaxError: invalid syntax 

我不明白为什么。 下面的代码:

#!/usr/bin/python 

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


# Set DEVELOPER_KEY to the API key value from the APIs & auth > Registered apps 
# tab of 
# https://cloud.google.com/console 
# Please ensure that you have enabled the YouTube Data API for your project. 
DEVELOPER_KEY = "MY_API_KEY" 
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) 

    # Call the search.list method to retrieve results matching the specified 
    # query term. 
    search_response = youtube.search().list(
    q=options.q, 
    part="id,snippet", 
    maxResults=options.max_results 
).execute() 

    videos = [] 
    channels = [] 
    playlists = [] 

    # Add each result to the appropriate list, and then display the lists of 
    # matching videos, channels, and playlists. 
    for search_result in search_response.get("items", []): 
    if search_result["id"]["kind"] == "youtube#video": 
     videos.append("%s (%s)" % (search_result["snippet"]["title"], 
           search_result["id"]["videoId"])) 
    elif search_result["id"]["kind"] == "youtube#channel": 
     channels.append("%s (%s)" % (search_result["snippet"]["title"], 
            search_result["id"]["channelId"])) 
    elif search_result["id"]["kind"] == "youtube#playlist": 
     playlists.append("%s (%s)" % (search_result["snippet"]["title"], 
            search_result["id"]["playlistId"])) 

    print ("Videos:\n", "\n".join(videos), "\n") 
    print ("Channels:\n", "\n".join(channels), "\n") 
    print ("Playlists:\n", "\n".join(playlists), "\n") 


if __name__ == "__main__": 
    argparser.add_argument("--q", help="Search term", default="Rome") 
    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)) 

回答

1

原始代码是为蟒2写入和,而在转换print给功能(这是必要的蟒3)您忘记到except块转换:

except HttpError as e:是python 3的例外情况,但你也可以使用except e:,除了所有的例外(可能不是你想要的)。

此外,你可以阅读更多关于蟒蛇2和3 here之间的变化。有些人可能会惊讶你!

+1

值得注意的是,Python3语法在Python2中仍然有效,因此即使在Python2代码中它也应该是首选。 – zondo