Python类方法循环控制问题:如何让__Handle_conn方法输入错误时保持自身循环不返回上级方法
Python类方法循环控制问题:如何让__Handle_conn方法输入错误时保持自身循环不返回上级方法
嘿,我来帮你搞定这个问题!你的核心问题出在__Handle_conn方法的两个地方:一是非法输入(非0/1/2的选项)时直接用return退出了方法,导致回到上级的dash_command;二是没有处理用户输入非整数的情况,这种情况会直接抛出ValueError中断循环。
要实现输入错误时留在当前方法的循环里,只需要做两个关键修改:
- 去掉else分支里的
return,换成错误提示,让循环自然继续 - 给获取用户输入的代码加上try-except捕获ValueError,处理非数字输入的情况
修改后的__Handle_conn方法代码如下:
def __Handle_conn(self,conn): print(self.main_dash_2) x = True while conn and x: try: inp = int(input("Send Your Command: ")) if inp == 0: conn.close() x = False # 标记循环结束,正常退出方法 elif inp == 1: try: conn.send(str.encode("cwd")) response = conn.recv(1024) print(response.decode()) # 解码后打印,避免显示字节串 except Exception as e: print(f"执行cwd命令出错: {e}") elif inp == 2: xx = str(input("Send Command [cmd + command]: ")) try: conn.send(str.encode(xx)) response = conn.recv(1024) print(response.decode()) except Exception as e: print(f"执行自定义命令出错: {e}") print("格式示例: cmd dir") else: print("无效的命令选项!请输入0、1或2") # 这里不要return,循环会自动进入下一轮 except ValueError: print("请输入有效的数字!") # 捕获非整数输入的异常,循环继续
修改说明:
- 移除return语句:原来的else分支里的
return会直接退出方法,现在换成错误提示后,循环会回到开头,等待用户重新输入。 - 添加ValueError捕获:当用户输入字母、符号等非整数内容时,会触发这个异常,提示用户输入数字,同时不中断循环。
- 正常退出逻辑:只有当用户输入0时,关闭连接并将
x设为False,让循环结束,方法正常退出回到上级,这是你期望的合法退出场景。 - 额外优化:给recv的字节串加上
decode(),让输出内容更易读;给异常提示加上具体的错误信息,方便调试。
这样修改后,不管是输入无效数字还是非数字内容,程序都会留在__Handle_conn的循环里,直到用户输入0才会退出回到上级方法。
备注:内容来源于stack exchange,提问作者zbegain
相关产品推荐
相关产品推荐

