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

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

新規登録して質問してみよう
ただいま回答率
85.48%
YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

479閲覧

pythonにおけるマップ処理中のエラー対応のやり方

shumpeism

総合スコア13

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2023/02/08 04:38

編集2023/02/08 04:40

実現したいこと

pythonで、マップ処理中に例外が発生してしまうのですが、その時の対処方法を知りたいです。

前提

やりたいこととしては、CSVの中にyoutubeのアカウント一覧が入っており、それに紐づくデータを出そうとしています。

youtubeのアカウント名に問題があるとき(URLで入ってしまっているなど)、youtube_channel_detailが動かなくなると思うのですが、その場合には無視して処理を続けたいです。

(python初心者のため、コードの汚い部分はご容赦ください)

発生している問題・エラーメッセージ

Traceback (most recent call last): File "...teratail.py", line 24, in <module> y3 = list(map(youtube_channel_detail, accounts)) File "...teratail.py", line 15, in youtube_channel_detail return search_response['items'][0] KeyError: 'items'

該当のソースコード

python

1from apiclient.discovery import build 2 3import pandas as pd 4 5import csv 6 7def youtube_channel_detail(channel_id): 8 api_service_name = 'youtube' 9 api_version = 'v3' 10 youtube = build(api_service_name, api_version, developerKey='API_KEY') #APIキーを入れています 11 search_response = youtube.channels().list( 12 part='snippet,statistics', 13 id=channel_id, 14 ).execute() 15 return search_response['items'][0] 16 17df = pd.read_csv('youtube_2.csv', skipinitialspace=True) 18 19 20accounts = df.youtube.tolist() 21print(accounts) 22print(map(youtube_channel_detail, accounts)) 23 24y = list(map(youtube_channel_detail, accounts)) 25 26list1 = [d.get('id') for d in y] 27list2 = [d.get('statistics').get('subscriberCount') for d in y] 28dict_from_list = dict(zip(list1, list2)) 29 30with open("dict.csv", 'w') as file: 31 writer = csv.writer(file) 32 for k, v in dict_from_list.items(): 33 writer.writerow([k, v])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2023/02/08 04:52

return search_response['items'][0] を return search_response['items'][0] if ('items' in search_response and search_response['items']) else None として、map の直後で None を削除してみてはどうでしょうか。(None の削除には filter 関数を利用します)
shumpeism

2023/02/08 05:28

コメントありがとうございます。 動くようになりました!! filter関数も説明していただき、とても分かりやすく、助かりました。 ありがとうございました。
guest

回答2

0

以下のようにresponseが意図したデータを保持しているかを確認し、問題あればNoneなり異常を示す値を返すようにします。
あとは呼出元で異常な要素のみを弾いてやればよいです。

Python

1def youtube_channel_detail(channel_id): 2 # 略 3 if 'items' in search_response and len(search_response['items']) > 0: 4 return search_response['items'][0] 5 return None # この行はなくてもよい 6 7# 略 8y = list(map(youtube_channel_detail, accounts)) 9y = [e for e in y if e is not None] 10# 略

投稿2023/02/08 05:36

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

melianさんのコメントで解決しました。

まず関数においてはif文を使ってNoneを返すようにし、mapの直後でfilterを使いました。

投稿2023/02/08 05:30

shumpeism

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問