在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('&','')
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'
Flask報錯 KeyError 'SQLALCHEMY_TRACK_MODIFICATIONS'.md
关于hue安装后出现KeyError: "Couldn't get user id for user hue"的解决方法