Python代码异常:输入正确端口后仍返回Wrong问题求助
解决端口输入错误后无法正确返回有效(host, Port)的问题
问题分析
你的代码出现这个问题,核心原因是er()函数的外层try-except块范围太广,加上递归调用的逻辑没有正确处理返回值。当输入错误端口触发hand()调用er()时,新的er()执行即便成功,它的返回值也没能正确传递出来,反而被原er()的外层except捕获,最终导致返回"Wrong"。
修复方案
我们可以改用循环重试的方式替代递归,逻辑更直观且不易出错,直到用户输入合法的主机和端口才返回有效元组:
def get_valid_server_info(): while True: try: host = input("Host: ") server_port_input = input("Port: ") # 尝试将端口转换为整数 port = int(server_port_input) # 输入合法,返回元组并退出循环 return (host, port) except ValueError: # 端口输入非数字时提示错误,继续循环重试 print("Wrong port format") # 获取合法的服务器信息 server_info = get_valid_server_info() print(server_info)
原代码的问题拆解
- 过宽的异常捕获:
er()的外层try-except捕获了所有Exception,包括递归调用过程中的正常返回逻辑,导致第一次输入错误后,后续的正确输入结果无法传递回最初的调用点。 - 递归逻辑缺陷:
hand()中直接调用er()是递归,但没有处理递归的返回值,原函数的流程会因为第一次异常触发外层except,直接返回"Wrong"。
修复后代码的优势
- 用
while True循环持续请求输入,逻辑清晰易懂 - 精准捕获
ValueError(仅针对端口转整数失败的情况),避免意外捕获其他未知错误 - 无递归调用,不存在栈溢出风险,返回值传递明确
内容的提问来源于stack exchange,提问作者Nita
相关产品推荐
相关产品推荐

