如何屏蔽Python yfinance包输出的404错误提示信息?
如何屏蔽yfinance获取股票评级时的404错误提示?
我用Python的yfinance包获取股票评级,代码如下:
recommendations = yf.Ticker("ANSCU").upgrades_downgrades
该代码大部分情况运行正常,但遇到无评级的股票代码(如ANSCU)时,会输出404错误信息:
404 Client Error: Not Found for url: https://query2.finance.yahoo.com/v10/finance/quoteSummary/ANSCU?modules=upgradeDowngradeHistory&corsDomain=finance.yahoo.com&form
尝试过重定向标准输出,但仅对自定义函数输出有效,无法屏蔽yfinance内部输出的错误提示,请问如何解决?
解决方案
方法1:通过logging模块屏蔽yfinance日志
yfinance内部使用logging模块输出错误信息,调整其日志级别即可过滤这类404错误:
import logging import yfinance as yf # 将yfinance的日志级别设为CRITICAL,仅输出严重错误 logging.getLogger('yfinance').setLevel(logging.CRITICAL) recommendations = yf.Ticker("ANSCU").upgrades_downgrades
方法2:临时重定向标准错误输出
很多库的错误提示会输出到stderr而非stdout,之前重定向stdout无效是因为没覆盖到stderr,可以临时将stderr重定向到空设备:
import sys import os import yfinance as yf def get_stock_recommendations(ticker): original_stderr = sys.stderr try: # 重定向stderr到空设备(Linux/macOS用os.devnull,Windows用"NUL") sys.stderr = open(os.devnull, 'w') return yf.Ticker(ticker).upgrades_downgrades finally: # 恢复原始stderr sys.stderr.close() sys.stderr = original_stderr recommendations = get_stock_recommendations("ANSCU")
方法3:捕获请求异常(进阶)
如果需要更精细的控制,可以捕获yfinance内部调用requests时抛出的HTTP异常,避免错误信息输出:
import yfinance as yf from requests.exceptions import HTTPError try: ticker = yf.Ticker("ANSCU") # 直接调用内部方法获取数据,跳过自动错误输出逻辑 data = ticker._get_quote_summary("upgradeDowngradeHistory") recommendations = ticker._parse_upgrades_downgrades(data) except HTTPError: # 捕获404等HTTP错误,自定义处理逻辑 recommendations = None
内容的提问来源于stack exchange,提问作者S Suen
相关产品推荐
相关产品推荐

