📌 この記事でわかること:
yfinance.Ticker.info
使用時に発生するAttributeError
/KeyError
の原因- 存在しないティッカーやETFなどでエラーが出る理由
- エラー回避のための安全なコーディング方法と実装パターン
👤 対象となる読者:
- Pythonで株価や企業情報を取得している初心者~中級者
yfinance
を活用して株価分析・データ取得を行いたいプログラマー- API使用時のエラー処理のベストプラクティスを学びたい方
🔧 活用できるシーン:
- ETFや外国株などの例外ケースを含む分析に対応したいとき
- 投資分析ツールをPythonで自作しているときに、銘柄によってエラーが発生した場合
- 自動スクリーニング処理で複数ティッカーを処理する際に落ちにくいコードを書きたいとき
1. はじめに
Pythonで株価や企業情報を取得する際、yfinance
のticker.info
は便利な機能です。
しかし、すべての銘柄で常に正常に動作するとは限らず、思わぬエラーに遭遇することがあります。
この記事では、以下のような具体的なエラー事例をもとに、原因と対処法をわかりやすく解説します:
- AttributeError(存在しないティッカー)
- KeyError(ETFなど特定キーが存在しない)
ticker.info
を活用する際の注意点として、参考にしてください。
2. 成功例:正常に取得できるパターン
代表的な銘柄「AAPL(Apple)」では、次のように問題なく情報が取得できます:
import yfinance as yf
ticker = yf.Ticker("AAPL")
info = ticker.info
print(info['sector']) # → "Technology"
このように、存在する主要銘柄では期待通りに動作します。
ただし、これは“常に安全”という保証ではありません。
3. AttributeError:存在しないティッカー指定時
▶ 発生コード例
import yfinance as yf
ticker = yf.Ticker("AAPLL") # 存在しないティッカー
info = ticker.info
print(info['sector'])
▶ 代表的なエラー
AttributeError: 'NoneType' object has no attribute 'update'
TypeError: 'NoneType' object is not subscriptable
HTTPError: 404 Client Error: Not Found for url...
▶ 原因
指定したティッカーがYahoo Financeに存在しないため、APIレスポンスが404となり、 info
がNone
または内部的に不正な状態になります。
その結果、後続の処理でAttributeErrorやTypeErrorが発生します。
▶ 対処法
- ティッカーの存在確認を事前に行う
info is not None
でチェックしてからアクセス- try-exceptで安全に例外処理を加える
if info is not None and 'sector' in info:
print(info['sector'])
else:
print("情報が取得できませんでした。")
4. KeyError:特定のキーが存在しないパターン
▶ 発生コード例(例:ETF「VOO」)
import yfinance as yf
ticker = yf.Ticker("VOO")
info = ticker.info
print(info['sector']) # KeyError
▶ エラー内容
KeyError: 'sector'
▶ 原因
ETFなど一部の金融商品では、info
に特定のキーが含まれていないことがあります。
株式銘柄とは異なり、業種(sector)などの情報が省略されていることがあるためです。
▶ 対処法
'sector' in info
でキーの存在を確認する.get()
メソッドでデフォルト値付きで取得する
sector = info.get('sector', '情報なし')
print(sector)
他にも、yfinanceではキーが見つからずKeyErrorが発生するケースがあります。
特に 'Adj Close'
が取得できない場合については、以下の記事で詳しく解説しています:
➡ yfinanceで’Adj Close’がない!? KeyErrorの原因と対処法
5. まとめ
yfinance.Ticker.info
は非常に便利なAPIですが、
- 存在しないティッカーによるAttributeError系の問題
- ETFなどに見られるKeyError といったエラーが起こる可能性があります。
これらを防ぐためには:
info is not None
の確認.get()
やin
を使った安全なキーアクセス- 予防的なtry-exceptの活用 が有効です。
実装時には「infoは常に取得できるわけではない」という前提でコードを書くことで、 yfinanceをより安定して活用できるようになります。
コメント