我有一个关于应用程序设计和异常处理的问题。我正在使用 web3.py 构建一个应用程序,整个应用程序的一部分正在围绕 web3.py 构建一个包装器模块,用于与区块链交互。偶尔会出现节点或网络问题,需要处理。在包装模块中处理这些异常还是在调用包装模块中的函数的代码中处理这些异常更好。例如:
包装模块中的处理:
def get_transaction_count(self, address=None, retries=5, retry_interval=3):
if address is None:
address = self.wallet_address
while retries >= 0:
try:
return self.w3.eth.get_transaction_count(address)
except (ConnectTimeout, HTTPError, ValueError):
retries -= 1
sleep(retry_interval)
continue
return None
相对
包装模块:
def get_transaction_count(self, address=None):
if address is None:
address = self.wallet_address
return self.w3.eth.get_transaction_count(address)
调用应用程序:
retries = 5
retry_interval = 3
while retries >= 0:
try:
count = sc.get_transaction_count(address)
except (ConnectTimeout, HTTPError, ValueError):
retries -= 1
sleep(retry_interval)
continue
if count is None:
print("Try connecting to another node and do the above again")
这可能是一个过于简单但很容易说明问题的例子。除了只进行 1 个 web3 调用并返回一个值之外,我还有其他包装函数可以做几件事。