Skip to content

Commit

Permalink
Merge pull request #1104 from ranaroussi/feature/improve-err-msgs
Browse files Browse the repository at this point in the history
Improve error message handling
  • Loading branch information
ValueRaider committed Oct 22, 2022
2 parents 303e0ea + c0e1536 commit 33f57ac
Showing 1 changed file with 40 additions and 23 deletions.
63 changes: 40 additions & 23 deletions yfinance/base.py
Expand Up @@ -139,24 +139,32 @@ def history(self, period="1mo", interval="1d",
debug: bool
Optional. If passed as False, will suppress
error message printing to console.
raise_errors: bool
Optional. If True, then raise errors as
exceptions instead of printing to console.
"""

# Work with errors
debug_mode = True
if "debug" in kwargs and isinstance(kwargs["debug"], bool):
debug_mode = kwargs["debug"]

err_msg = "No data found for this date range, symbol may be delisted"
raise_errors = False
if "raise_errors" in kwargs and isinstance(kwargs["raise_errors"], bool):
raise_errors = kwargs["raise_errors"]

if start or period is None or period.lower() == "max":
# Check can get TZ. Fail => probably delisted
tz = self._get_ticker_tz()
if tz is None:
# Every valid ticker has a timezone. Missing = problem
err_msg = "No timezone found, symbol certainly delisted"
shared._DFS[self.ticker] = utils.empty_df()
shared._ERRORS[self.ticker] = err_msg
if "many" not in kwargs and debug_mode:
print('- %s: %s' % (self.ticker, err_msg))
if raise_errors:
raise Exception('%s: %s' % (self.ticker, err_msg))
else:
print('- %s: %s' % (self.ticker, err_msg))
return utils.empty_df()

if end is None:
Expand Down Expand Up @@ -212,28 +220,31 @@ def history(self, period="1mo", interval="1d",
except Exception:
pass

if data is None or not type(data) is dict or 'status_code' in data.keys():
shared._DFS[self.ticker] = utils.empty_df()
shared._ERRORS[self.ticker] = err_msg
if "many" not in kwargs and debug_mode:
print('- %s: %s' % (self.ticker, err_msg))
return utils.empty_df()

if "chart" in data and data["chart"]["error"]:
err_msg = "No data found for this date range, symbol may be delisted"
fail = False
if data is None or not type(data) is dict:
fail = True
elif type(data) is dict and 'status_code' in data.keys():
err_msg += "(Yahoo status_code = {})".format(data["status_code"])
fail = True
elif "chart" in data and data["chart"]["error"]:
err_msg = data["chart"]["error"]["description"]
fail = True
elif not "chart" in data or data["chart"]["result"] is None or not data["chart"]["result"]:
fail = True
elif not period is None and not "timestamp" in data["chart"]["result"][0] and not period in data["chart"]["result"][0]["meta"]["validRanges"]:
# User provided a bad period. The minimum should be '1d', but sometimes Yahoo accepts '1h'.
err_msg = "Period '{}' is invalid, must be one of {}".format(period, data["chart"]["result"][0]["meta"]["validRanges"])
fail = True
if fail:
shared._DFS[self.ticker] = utils.empty_df()
shared._ERRORS[self.ticker] = err_msg
if "many" not in kwargs and debug_mode:
print('- %s: %s' % (self.ticker, err_msg))
return shared._DFS[self.ticker]

elif "chart" not in data or data["chart"]["result"] is None or \
not data["chart"]["result"]:
shared._DFS[self.ticker] = utils.empty_df()
shared._ERRORS[self.ticker] = err_msg
if "many" not in kwargs and debug_mode:
print('- %s: %s' % (self.ticker, err_msg))
return shared._DFS[self.ticker]
if raise_errors:
raise Exception('%s: %s' % (self.ticker, err_msg))
else:
print('%s: %s' % (self.ticker, err_msg))
return utils.empty_df()

# parse quotes
try:
Expand All @@ -247,7 +258,10 @@ def history(self, period="1mo", interval="1d",
shared._DFS[self.ticker] = utils.empty_df()
shared._ERRORS[self.ticker] = err_msg
if "many" not in kwargs and debug_mode:
print('- %s: %s' % (self.ticker, err_msg))
if raise_errors:
raise Exception('%s: %s' % (self.ticker, err_msg))
else:
print('%s: %s' % (self.ticker, err_msg))
return shared._DFS[self.ticker]

# 2) fix weired bug with Yahoo! - returning 60m for 30m bars
Expand Down Expand Up @@ -283,7 +297,10 @@ def history(self, period="1mo", interval="1d",
shared._DFS[self.ticker] = utils.empty_df()
shared._ERRORS[self.ticker] = err_msg
if "many" not in kwargs and debug_mode:
print('- %s: %s' % (self.ticker, err_msg))
if raise_errors:
raise Exception('%s: %s' % (self.ticker, err_msg))
else:
print('%s: %s' % (self.ticker, err_msg))

if rounding:
quotes = _np.round(quotes, data[
Expand Down

0 comments on commit 33f57ac

Please sign in to comment.