Python实现路由器移除功能代码报内部服务器错误问题求助
代码报错原因分析
- 类实例调用错误
你定义的remove_node是Graph类的实例方法,必须先创建Graph类的实例对象,再通过实例调用方法。你现在直接写Graph.remove_node(name)相当于没有给方法的第一个self参数传值,会直接触发参数不匹配或者属性不存在的异常。
正确写法示例:
# 先全局实例化Graph类 graph_instance = Graph() @app.post("/removerouter/") def removerouter(name: str): graph_instance.remove_node(name) return "success"
- 遍历列表时修改原列表引发异常
remove_node方法中直接在遍历self.edges的过程中删除列表元素,会导致列表迭代器错乱,轻则漏删匹配的边,重则直接抛出索引异常。
建议修改为遍历列表的副本再操作原列表:
def remove_node(self, name): if name not in self.nodes: return self.nodes.remove(name) # 遍历列表副本避免异常 for edge in self.edges[:]: if name in edge: self.edges.remove(edge)
- 未做异常兼容处理
list.remove()方法在目标元素不存在时会直接抛出ValueError,你没有对这个场景做兼容或者异常捕获,当传入的节点名不存在时就会触发报错导致接口返回500,可增加存在性判断或者try-except逻辑捕获处理异常。 - FastAPI接口参数匹配问题
POST接口如果接收的是请求体中的参数,直接写name: str默认会被FastAPI识别为查询参数,如果前端是把参数放在请求体里传递,接口会拿不到参数触发报错,需要引入Body注解声明参数位置:
from fastapi import Body @app.post("/removerouter/") def removerouter(name: str = Body()): # 后续逻辑
内容的提问来源于stack exchange,提问作者ClarkeJ2000
相关产品推荐
相关产品推荐

