You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

原代码的问题拆解

  1. 过宽的异常捕获:er()的外层try-except捕获了所有Exception,包括递归调用过程中的正常返回逻辑,导致第一次输入错误后,后续的正确输入结果无法传递回最初的调用点。
  2. 递归逻辑缺陷:hand()中直接调用er()是递归,但没有处理递归的返回值,原函数的流程会因为第一次异常触发外层except,直接返回"Wrong"。

修复后代码的优势

  • 用while True循环持续请求输入,逻辑清晰易懂
  • 精准捕获ValueError(仅针对端口转整数失败的情况),避免意外捕获其他未知错误
  • 无递归调用,不存在栈溢出风险,返回值传递明确

内容的提问来源于stack exchange,提问作者Nita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:36:52