python - 简化尝试,除了 yahooquery
问题描述
我正在尝试从 yahooquery 获取大约 10 个股票属性。当某些数据不可用时(例如,当公司没有盈利时,没有 PE 比率)它会引发 KeyError。在这种情况下,我想返回零。有什么办法可以简化我的代码而不是把 Try/Except 放到每个属性上?
def data(ticker): #pulling data about stock from Yahoo Finance API
try:
company_name = Ticker(ticker).quote_type[ticker]["shortName"]
except KeyError:
company_name = 0
try:
stock_price = Ticker(ticker).financial_data[ticker]["currentPrice"]
except KeyError:
stock_price = 0
try:
change = Ticker(ticker).history(interval='1mo', start=(datetime.datetime.today() - datetime.timedelta(days=90)), end=datetime.datetime.today())
change = change["open"]
growth_or_loose = ((change.iloc[-1] / change.iloc[0]) - 1)
except:
growth_or_loose = 0
try:
recommendation = Ticker(ticker).financial_data[ticker]["recommendationKey"]
except KeyError:
recommendation = 0
try:
market_cap = Ticker(ticker).summary_detail[ticker]["marketCap"]
except KeyError:
market_cap = 0
try:
pe = Ticker(ticker).summary_detail[ticker]["trailingPE"]
except KeyError:
pe = 0
try:
pb = Ticker(ticker).key_stats[ticker]["priceToBook"]
except KeyError:
pb = 0
try:
rev_growth = Ticker(ticker).financial_data[ticker]["revenueGrowth"]
except KeyError:
rev_growth = 0
try:
ern_growth = Ticker(ticker).financial_data[ticker]["earningsGrowth"]
except KeyError:
ern_growth = 0
profit_margin = Ticker(ticker).financial_data[ticker]["profitMargins"]
try:
debt2equity = Ticker(ticker).financial_data[ticker]["debtToEquity"]
except KeyError:
debt2equity = 0
data = company_name, stock_price, growth_or_loose, recommendation, market_cap, pe, pb, rev_growth, ern_growth, profit_margin, debt2equity
return list(data)```
解决方案
您还可以使用集合中的 defaultdict 为任何没有值的变量提供默认值。首先将您的字典转换为 defaultdict
# Python program to demonstrate
# defaultdict
from collections import defaultdict
# Function to return a default
# values for keys that is not
# present
def def_value():
return "Not Present"
# Defining the dict
d = defaultdict(def_value)
d["a"] = 1
d["b"] = 2
print(d["a"])
print(d["b"])
print(d["c"])
输出:
1
2
Not Present
推荐阅读
- google-api - Google API:如何增加访问令牌到期日期?
- powerbi - Power BI - 计算同一表中的行并且不忽略切片器的计算列
- python - Flask-SocketIo,如何在 python 线程和 socketio.start_background_task 线程之间共享数据?
- grep - 如何搜索具有 2 个连续新行模式的文件并修改后续行?
- angular - 使用 Angular 组件样式在 sass 中字体真棒内容
- python - 在 Python 中压缩字符串并获取详细信息、统计信息等
- python - python pandas iloc 适用于 jupyter 但不适用于烧瓶
- google-cloud-platform - Google Cloud - 通过私钥访问 Linux VM
- docker - kube-addon-manager 中的 kubectl 超时
- javascript - Yii2中如何保存下拉列表和复选框列表