Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions Stock-Analysis/fetch_stocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,15 @@ class StockFetcher:

@staticmethod
def fetch_stock_data(stock):
"""Fetch stock data from Yahoo Finance with improved error handling."""
"""
Fetch stock data from Yahoo Finance with improved error handling.

Args:
stock (str): Stock symbol to fetch.

Returns:
tuple: (recommendationMean, stock) if successful, None otherwise.
"""
try:
ticker = yf.Ticker(stock)
info = ticker.info
Expand All @@ -23,29 +31,32 @@ def fetch_stock_data(stock):
return (rate, stock)

except ValueError as e:
print(f"ValueError: Could not fetch data for {stock}. {e}")
logging.getLogger(__name__).error(
f"[ValueError] Unable to fetch data for '{stock}': {e}. "
f"Possible causes: Invalid stock symbol or empty API response."
)

except KeyError as e:
print(f"KeyError: Missing expected data for {stock}. {e}")
logging.getLogger(__name__).error(
f"[KeyError] Missing expected data for '{stock}': {e}. "
f"The API might have changed or the stock does not provide recommendation data.",
exc_info=True
)

except URLError as e:
print(f"Network error: Could not fetch data for {stock}. {e}")
logging.getLogger(__name__).error(
f"[URLError] Network issue while fetching '{stock}': {e}. "
f"Please check your internet connection or try again later."
)

except Exception as e:
print(f"Oops! Could not fetch data for {stock}. Please check your stock symbol or internet connection.")
logging.getLogger(__name__).error(
f"[Unexpected Error] Failed to fetch '{stock}': ({type(e).__name__}) {e}",
exc_info=True
)

return None