You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

捕获web3.TransactionNotFound异常失败,求解决方法

解决Web3 TransactionNotFound异常捕获失败的问题

问题原因分析

你遇到的问题核心原因有两点:

  1. 第一种捕获方式报错NameError,是因为未导入TransactionNotFound异常类,Python无法识别这个未定义的名称。
  2. 后两种方式无效,大概率是异常匹配顺序错误、模块导入不完整,或者异常被上层代码提前拦截。

正确的捕获方案

方案1:导入异常类后直接捕获

先从web3.exceptions中导入目标异常类,再在except块中使用:

from web3 import Web3
from web3.exceptions import TransactionNotFound

# 初始化Web3实例
w3 = Web3(Web3.HTTPProvider("你的节点URL"))

try:
    # 执行可能抛出异常的操作,例如查询交易
    tx = w3.eth.get_transaction("0xb5f2ffa5e1d79e7cf5bee4892f75303db227554c322fa32c1e97026915b740a8")
except TransactionNotFound as error:
    print(f"交易未找到: {error}")
# 通用异常捕获必须放在具体异常之后
except Exception as error:
    print(f"其他异常: {error}")

方案2:使用完整模块路径捕获

如果不想单独导入异常类,直接通过web3.exceptions的完整路径引用:

import web3

w3 = web3.Web3(web3.Web3.HTTPProvider("你的节点URL"))

try:
    tx = w3.eth.get_transaction("0xb5f2ffa5e1d79e7cf5bee4892f75303db227554c322fa32c1e97026915b740a8")
except web3.exceptions.TransactionNotFound as error:
    print(f"交易未找到: {error}")
except Exception as error:
    print(f"其他异常: {error}")

无效情况的排查步骤

如果以上方案仍无效,按以下步骤排查:

  1. 确认实际抛出的异常类型:在通用except块中打印异常类型,验证是否确实是TransactionNotFound:
    try:
        # 你的业务代码
    except Exception as error:
        print(f"实际异常类型: {type(error)}")
        print(f"异常信息: {error}")
    
  2. 检查异常拦截顺序:确保具体异常捕获块放在通用异常块之前,Python会匹配第一个符合条件的except块,若通用块在前,会直接拦截所有异常。
  3. 验证Web3模块导入正确性:确保web3模块已正确安装且导入方式无误,避免因导入不完整导致无法识别异常类。

不推荐的方案

不要通过字符串匹配异常信息(你尝试的第三种方法),这种方式非常不可靠:不同Web3版本的异常文本可能存在差异,且异常对象的字符串比较容易因格式细节(如空格、引号)失效。

内容的提问来源于stack exchange,提问作者kAramelniy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:48:15