十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

cryptoCMD异常处理指南:InvalidParameters等3类常见错误如何精准捕获

cryptoCMD异常处理指南:InvalidParameters等3类常见错误如何精准捕获 cryptoCMD异常处理指南InvalidParameters等3类常见错误如何精准捕获【免费下载链接】cryptoCMDCryptocurrency historical price data library in Python. Data from https://coinmarketcap.com.项目地址: https://gitcode.com/gh_mirrors/cr/cryptoCMDcryptoCMD是一个从 CoinMarketCap 抓取加密货币历史价格数据日期、开高低收、成交量、市值的 Python 库。使用其核心类CmcScraper拉取数据时最常遇到 3 类异常InvalidParameters参数不完整、InvalidCoinCode币种代码不存在和ValueError法币货币未知。本文逐一说明它们的触发场景、报错信息原文以及如何用try/except精准捕获帮你快速搭出稳定的数据管道。一、3类常见错误速查表在动手之前先建立一张错误地图。cryptoCMD 的异常都定义在cryptocmd/utils.py与cryptocmd/core.py中层次如下错误类型父类触发场景定义位置InvalidParametersValueError初始化CmcScraper时日期参数不完整cryptocmd/core.pyInvalidCoinCodeNotImplementedError币种代码在 CoinMarketCap 中查不到cryptocmd/utils.pyValueError内置异常传入不支持的法币货币代码fiatcryptocmd/utils.py 记住这张表后面每一节的捕获写法都能对号入座。二、InvalidParameters参数校验错误的捕获方法这是初始化阶段就会抛出的错误。当all_time为False时start_date和end_date必须同时提供否则会在校验逻辑中直接抛出异常见cryptocmd/core.py中的参数校验分支from cryptocmd import CmcScraper # ❌ 只给了开始日期没给结束日期 scraper CmcScraper(BTC, start_date01-01-2024) # InvalidParameters: start_date or end_date cannot be empty # if all_time flag is False精准捕获方式——由于InvalidParameters继承自ValueError两种写法都可以但建议优先捕获子类语义更清晰from cryptocmd.utils import InvalidParameters try: scraper CmcScraper(BTC, start_date01-01-2024) except InvalidParameters as e: print(f参数不完整请检查日期配置{e})✅规避建议要么start_date与end_date成对传入格式dd-mm-yyyy要么显式写all_timeTrue拉取全量历史数据。三、InvalidCoinCode币种代码不存在如何快速定位当你传入的币种代码如XRP在 CoinMarketCap 的币种列表里匹配不到时cryptocmd/utils.py中的get_coin_id会抛出InvalidCoinCode: XXXX coin code is unavailable on coinmarketcap.comfrom cryptocmd.utils import InvalidCoinCode try: scraper CmcScraper(XXXX) scraper.get_data() except InvalidCoinCode as e: print(f该币种代码无法识别{e})⚠️两个高频坑代码重复多个币种共用同一代码如sol对应 Solana 和 Solcoin。此时需追加coin_name参数消歧参考示例examples/get_by_coin_name.pyscraper CmcScraper(coin_codesol, coin_namesolana)最稳妥方案——直接用 id_number每个币种在 CoinMarketCap 上有唯一 ID提供id_number后它会覆盖coin_code与coin_name彻底绕开代码歧义写法见examples/get_by_id_number.pyscraper CmcScraper(id_number5426)四、ValueError未知法币货币的捕获与排查初始化时fiat参数默认为USD。如果传入了库不支持的货币代码download_coin_data会抛出标准ValueError并附带上完整的受支持列表ValueError: Unknown fiat ABC. Supported: AUD, BRL, CAD, CHF, ...try: scraper CmcScraper(BTC, fiatABC) scraper.get_data() except ValueError as e: print(f法币代码错误{e}) 所有受支持的法币代码都维护在cryptocmd/fiat_ids.json中报错信息里的Supported:清单即来自该文件直接照抄即可修正。五、完整模板一段代码搞定所有异常实际项目中建议把三类错误分层捕获子类必须写在父类之前否则InvalidParameters会被ValueError分支截胡from cryptocmd import CmcScraper from cryptocmd.utils import InvalidParameters, InvalidCoinCode try: scraper CmcScraper( BTC, start_date01-01-2024, end_date01-06-2024, fiatUSD, ) df scraper.get_dataframe() # 需要安装 pandas except InvalidParameters as e: print(f[参数错误] {e}) except InvalidCoinCode as e: print(f[币种错误] {e}) except ValueError as e: print(f[货币/参数格式错误] {e}) except Exception as e: print(f[网络或其他错误] {e}) 补充两点网络异常请求 CoinMarketCap 接口失败时底层get_url_data会先打印Error message (get_url_data) : ...再向上抛出因此最外层的通用Exception兜底不可少。pandas 缺失调用get_dataframe()但未安装 pandas 时会抛出NotImplementedError提示pip install pandas可在兜底分支中一并判断。六、排查清单报错后先查这 4 项遇到异常别慌按顺序核对日期成对吗start_date与end_date必须同时提供或all_timeTrue日期格式对吗统一使用dd-mm-yyyy如15-10-2017币种代码准吗代码重复就加coin_name追求稳就用id_numberfiat 在支持列表里吗参照报错信息或cryptocmd/fiat_ids.json核对。掌握以上 3 类异常的来源与捕获姿势再配合最后的完整模板你的 cryptoCMD 数据抓取任务就能从偶尔崩一次变成稳定跑全程。【免费下载链接】cryptoCMDCryptocurrency historical price data library in Python. Data from https://coinmarketcap.com.项目地址: https://gitcode.com/gh_mirrors/cr/cryptoCMD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表