diff --git a/redis/asyncio/cluster.py b/redis/asyncio/cluster.py index f343e26b75..11d3f093f7 100644 --- a/redis/asyncio/cluster.py +++ b/redis/asyncio/cluster.py @@ -1597,18 +1597,24 @@ async def _execute( result.args = (msg,) + result.args[1:] raise result - default_node = nodes.get(client.get_default_node().name) - if default_node is not None: - # This pipeline execution used the default node, check if we need - # to replace it. - # Note: when the error is raised we'll reset the default node in the - # caller function. - for cmd in default_node[1]: - # Check if it has a command that failed with a relevant - # exception - if type(cmd.result) in self.__class__.ERRORS_ALLOW_RETRY: - client.replace_default_node() - break + default_cluster_node = client.get_default_node() + + # Check whether the default node was used. In some cases, + # 'client.get_default_node()' may return None. The check below + # prevents a potential AttributeError. + if default_cluster_node is not None: + default_node = nodes.get(default_cluster_node.name) + if default_node is not None: + # This pipeline execution used the default node, check if we need + # to replace it. + # Note: when the error is raised we'll reset the default node in the + # caller function. + for cmd in default_node[1]: + # Check if it has a command that failed with a relevant + # exception + if type(cmd.result) in self.__class__.ERRORS_ALLOW_RETRY: + client.replace_default_node() + break return [cmd.result for cmd in stack]