NetworkX,当节点不在图中时,我该如何成功捕获network.exception.NetworkXError?

5
当一个节点不在图中时,我会收到异常错误。尝试捕获和处理它时,我无法做到(所以我一定做错了什么)。如何捕获和处理networkx.exception.NetworkXError?以下是错误信息:

<snip> raise NetworkXError("The node %s is not in the digraph."%(n,)) networkx.exception.NetworkXError: The node 33293542 is not in the digraph.

以下是我尝试捕获和处理它的方式:
try:
    path_len = nx.shortest_path_length(G,uNode, vNode)
except (nx.NetworkXNoPath, nx.exception.NetworkXError) as e:
    print e
    continue 

我也尝试过以下方法:

try:
        path_len = nx.shortest_path_length(G,uNode, vNode)
except (nx.NetworkXNoPath, KeyError) as e:
        print e
        continue 

我在两个列表中维护了uNodevNode,我可以这样做:if v in target_nodes:。但在此之前,我想知道是否有一种优雅的方法来处理这个NetworkX异常


为什么你不能只这样做 if G.has_node(uNode) and G.has_node(vNode): path_len = nx.shortest_path_length(G,uNode, vNode) 呢? - EdChum
2个回答

4

如果你只是确保不会尝试获取不存在节点的路径长度,那么为什么不直接使用has_node

if G.has_node(uNode) and G.has_node(vNode):
    path_len = nx.shortest_path_length(G,uNode, vNode)

编辑

以下内容对我有效:

In [76]:    
import networkx as nx
G=nx.Graph()
G.add_edge(2,3)
try:
    nx.shortest_path_length(G,0,1)
except nx.NetworkXError:
    print("not found")

not found

1
你的建议是一个很好的解决方法!但是,为什么不能处理那个特定的异常,这是NetworkX的问题吗? - sAguinaga
1
我不知道,会进行调查。 - EdChum
看起来适当的异常类型应该是 nx.NetworkXError - EdChum

3

应该是nx.exception.NetworkXError,因此:

import networkx as nx

try:
    nx.shortest_path_length(G,0,1)
except nx.exception.NetworkXError:
    print("not found")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接