@@ -270,28 +270,39 @@ def last_price(self):
270270 return self ._last_price
271271 prices = self ._get_1y_prices ()
272272 if prices .empty :
273- self ._last_price = self ._get_exchange_metadata ()["regularMarketPrice" ]
273+ md = self ._get_exchange_metadata ()
274+ if "regularMarketPrice" in md :
275+ self ._last_price = md ["regularMarketPrice" ]
274276 else :
275277 self ._last_price = float (prices ["Close" ].iloc [- 1 ])
276278 if _np .isnan (self ._last_price ):
277- self ._last_price = self ._get_exchange_metadata ()["regularMarketPrice" ]
279+ md = self ._get_exchange_metadata ()
280+ if "regularMarketPrice" in md :
281+ self ._last_price = md ["regularMarketPrice" ]
278282 return self ._last_price
279283
280284 @property
281285 def previous_close (self ):
282286 if self ._prev_close is not None :
283287 return self ._prev_close
284288 prices = self ._get_1wk_1h_prepost_prices ()
285- prices = prices [["Close" ]].groupby (prices .index .date ).last ()
286- if prices .shape [0 ] < 2 :
287- # Very few symbols have previousClose despite no
288- # no trading data. E.g. 'QCSTIX'.
289- # So fallback to original info[] if available.
290- self ._tkr .info # trigger fetch
291- if "previousClose" in self ._tkr ._quote ._retired_info :
292- self ._prev_close = self ._tkr ._quote ._retired_info ["previousClose" ]
289+ fail = False
290+ if prices .empty :
291+ fail = True
293292 else :
294- self ._prev_close = float (prices ["Close" ].iloc [- 2 ])
293+ prices = prices [["Close" ]].groupby (prices .index .date ).last ()
294+ if prices .shape [0 ] < 2 :
295+ # Very few symbols have previousClose despite no
296+ # no trading data e.g. 'QCSTIX'.
297+ fail = True
298+ else :
299+ self ._prev_close = float (prices ["Close" ].iloc [- 2 ])
300+ if fail :
301+ # Fallback to original info[] if available.
302+ self ._tkr .info # trigger fetch
303+ k = "previousClose"
304+ if self ._tkr ._quote ._retired_info is not None and k in self ._tkr ._quote ._retired_info :
305+ self ._prev_close = self ._tkr ._quote ._retired_info [k ]
295306 return self ._prev_close
296307
297308 @property
@@ -309,8 +320,9 @@ def regular_market_previous_close(self):
309320 # no trading data. E.g. 'QCSTIX'.
310321 # So fallback to original info[] if available.
311322 self ._tkr .info # trigger fetch
312- if "regularMarketPreviousClose" in self ._tkr ._quote ._retired_info :
313- self ._reg_prev_close = self ._tkr ._quote ._retired_info ["regularMarketPreviousClose" ]
323+ k = "regularMarketPreviousClose"
324+ if self ._tkr ._quote ._retired_info is not None and k in self ._tkr ._quote ._retired_info :
325+ self ._reg_prev_close = self ._tkr ._quote ._retired_info [k ]
314326 else :
315327 self ._reg_prev_close = float (prices ["Close" ].iloc [- 2 ])
316328 return self ._reg_prev_close
@@ -483,8 +495,9 @@ def market_cap(self):
483495 # E.g. 'BTC-USD'
484496 # So fallback to original info[] if available.
485497 self ._tkr .info
486- if "marketCap" in self ._tkr ._quote ._retired_info :
487- self ._mcap = self ._tkr ._quote ._retired_info ["marketCap" ]
498+ k = "marketCap"
499+ if self ._tkr ._quote ._retired_info is not None and k in self ._tkr ._quote ._retired_info :
500+ self ._mcap = self ._tkr ._quote ._retired_info [k ]
488501 else :
489502 self ._mcap = float (shares * self .last_price )
490503 return self ._mcap
0 commit comments