首页 > 解决方案 > 简化尝试,除了 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)```

标签: pythonyahoo-financesimplifytry-except

解决方案


您还可以使用集合中的 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

推荐阅读