在Python中出现了KeyError: ''怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中出现了KeyError: ''怎么解决?相关的知识,希望对你有一定的参考价值。

参考技术A

在Python中出现了KeyError一般是你使用字典里不存在的”key“产生的错误,避免产生错误的方法很简单,使用字典的”get”方法,它接受一个“key”和一个默认值,这个默认值只有“key”不存在的使用返,存在则只接访问“key”的值。

以下为解决方法:

扩展资料:

try语句,与except,finally配合使用处理在程序运行中出现的异常情况。

Python采用动态类型系统。在编译的时候,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。不过,虽然Python采用动态类型系统,它同时也是强类型的。Python禁止没有明确定义的操作,比如数字加字符串。

参考资料来源:百度百科-Python

KeyError: 'commentCount' 在 Python 中使用 Youtube API

【中文标题】KeyError: \'commentCount\' 在 Python 中使用 Youtube API【英文标题】:KeyError: 'commentCount' using Youtube API in PythonKeyError: 'commentCount' 在 Python 中使用 Youtube API 【发布时间】:2022-01-03 07:15:45 【问题描述】:

我使用这个 python 代码从 Youtube API v3 获取数据。

首先构建了一个函数来获取观看次数、喜欢次数、不喜欢次数和评论次数,然后是另一个大块,它本身就是一个获取“视频 id”等信息的函数,最后它将所有内容放入 pandas 数据帧中。

它适用于某些 YouTube 频道,但其他一些频道无法获取 cmets 的数量。我在我的 Python Notebook 中遇到了这个错误消息:

KeyError                                  Traceback (most recent call last)

<ipython-input-46-de3cf6032d33> in <module>()
      5 df2 = pd.DataFrame(columns=['video_id','video_title','upload_date','view_count','like_count','dislike_count','comment_count'])
      6 
----> 7 df2 = get_videos(df2)

1 frames

<ipython-input-44-90ae6e5b0155> in get_video_details(video_id)
      8     like_count = response_video_stats['items'][0]['statistics']['likeCount']
      9     dislike_count = response_video_stats['items'][0]['statistics']['dislikeCount']
---> 10     comment_count = response_video_stats['items'][0]['statistics']['commentCount']
     11 
     12     #return view_count

KeyError: 'commentCount'

我想if else 声明可以解决问题,但无论如何都不是最佳选择。

这是完整的代码:

# Import libraries
import requests
import pandas as pd
import time

# Keys
API_KEY = 'xxx'
CHANNEL_ID = 'xxx'

def get_video_details(video_id):

    #collecting view, like, dislike, comment counts
    url_video_stats = 'https://www.googleapis.com/youtube/v3/videos?id='+video_id+'&part=statistics&key='+API_KEY
    response_video_stats = requests.get(url_video_stats).json()

    view_count = response_video_stats['items'][0]['statistics']['viewCount']
    like_count = response_video_stats['items'][0]['statistics']['likeCount']
    dislike_count = response_video_stats['items'][0]['statistics']['dislikeCount']
    comment_count = response_video_stats['items'][0]['statistics']['commentCount']

    return view_count, like_count, dislike_count, comment_count

def get_videos(df):
    pageToken = ''
    while 1:
        url = 'https://www.googleapis.com/youtube/v3/search?key='+API_KEY+'&channelId='+CHANNEL_ID+'&part=snippet,id&order=date&maxResults=10000&'+pageToken

        response = requests.get(url).json()
        time.sleep(1) #give it a second before starting the for loop
        for video in response['items']:
            if video['id']['kind'] == "youtube#video":
                video_id = video['id']['videoId']
                video_title = video['snippet']['title']
                video_title = str(video_title).replace('&amp;','')
                upload_date = video['snippet']['publishedAt']
                upload_date = str(upload_date).split("T")[0]
                #view_count = get_video_details(video_id)
                view_count, like_count, dislike_count, comment_count = get_video_details(video_id)

                df = df.append('video_id':video_id,
                                'video_title':video_title,
                                'upload_date':upload_date,
                                'view_count':view_count,
                                'like_count':like_count,
                                'dislike_count':dislike_count,
                                'comment_count':comment_count,
                               ignore_index=True)
        try:
            if response['nextPageToken'] != None: #if none, it means it reached the last page and break out of it
                pageToken = 'pageToken=' + response['nextPageToken']

        except:
            break


    return df

#build our dataframe
df2 = pd.DataFrame(columns=['video_id','video_title','upload_date','view_count','like_count','dislike_count','comment_count']) 

df2 = get_videos(df2)

【问题讨论】:

.get('commentCount', 0) ? 我把它放在 Try except 中就可以了 【参考方案1】:

第一个函数中的try except 确实可以很好地解决问题

def get_video_details(video_id):

    #collecting view, like, dislike, comment counts
    url_video_stats = 'https://www.googleapis.com/youtube/v3/videos?id='+video_id+'&part=statistics&key='+API_KEY
    response_video_stats = requests.get(url_video_stats).json()

    #view_count = response_video_stats['items'][0]['statistics']['viewCount']
    #like_count = response_video_stats['items'][0]['statistics']['likeCount']
    #dislike_count = response_video_stats['items'][0]['statistics']['dislikeCount']
    #comment_count = response_video_stats['items'][0]['statistics']['commentCount']

    view_count = response_video_stats['items'][0]['statistics']['viewCount']
    try:
      like_count = response_video_stats['items'][0]['statistics']['likeCount']
    except KeyError:
      like_count = response_video_stats.get('likeCount', 0)
    try:
      dislike_count = response_video_stats['items'][0]['statistics']['dislikeCount']
    except:
      dislike_count = response_video_stats.get('dislikeCount', 0)
    try:
      comment_count = response_video_stats['items'][0]['statistics']['commentCount']
    except:
      comment_count = response_video_stats.get('commentCount', 0)

    return view_count, like_count, dislike_count, comment_count

【讨论】:

以上是关于在Python中出现了KeyError: ''怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow 出现KeyError: 'tulips\8689672277_b289909f97_n.jpg'报错

python3 日志检索异常抛出异常 raise KeyError(key),KeyError: 'formatters'

python里出现keyerror 怎么解决

Flask報錯 KeyError 'SQLALCHEMY_TRACK_MODIFICATIONS'.md

PYTHON:处理 KeyError

关于hue安装后出现KeyError: "Couldn't get user id for user hue"的解决方法