在 python 中删除路由器功能

Remove router function in python

你好只是想知道是否有人能告诉我为什么这段代码不起作用 它给出了一个内部服务器错误 谢谢

@app.post("/removerouter/")
def removerouter(name: str):
    Graph.remove_node(name)
    return "success"

这是Graph里面的函数


class Graph:
    def __init__(self):
        self.nodes = []
        self.edges = []
    def remove_node(self, name):
        self.nodes.remove(name)
        for Edges in self.edges:
            if name in Edges:
                self.edges.remove(Edges)

根据您发布的代码,我会说这个问题与您如何在 for 循环中删除边缘有关。

当您使用 Python 中的 remove() 函数删除列表元素时,它会更改剩余元素的索引。 有关更多详细信息和替代方案,请参阅此 SO question.

我也不明白您为什么要在 for 循环中使用名为 Edges 的迭代器变量。 Python 变量应始终以小写字母开头,以免与任何现有(或未来)class 名称冲突。

我宁愿做这样的事情:

class Graph:
    def __init__(self):
        self.nodes = []
        self.edges = []

    def remove_node(self, name):
        self.nodes.remove(name)
        self.edges = [edge for edge in self.edges if name not in edge] 

请注意,我在这里使用列表推导式将新列表分配给 self.edges

如果你想避免列表理解,你也可以保留你的 for 循环并首先存储需要删除的边的索引。然后,对于每个索引,您可以简单地执行 del self.edges[index].