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

如何在Python的try块中保存值并传递至except块?

问题分析与解决

问题根源

你的代码中,当用户输入非整数时,x = int(input("Enter an integer: "))的执行顺序是先调用input()获取输入,再尝试用int()转换。如果转换失败触发ValueError,输入的原始值还没来得及赋值给x,所以except块里的x还是之前的初始值(None),导致提示错误。

解决方案

核心是先保存用户的原始输入,再进行类型转换,这样异常发生时能直接拿到无效的输入值。完全不需要依赖全局变量,用局部变量更简洁且避免副作用:

def main():
    x = get_int()
    print(f"x = {x}")

def get_int():
    while True:
        user_input = input("Enter an integer: ")
        try:
            return int(user_input)
        except ValueError:
            print(f"{user_input} is invalid. Expecting an integer")

if __name__ == "__main__":
    main()

代码说明

  • 先把用户输入的原始值存入user_input局部变量,再尝试转换为整数
  • 如果转换成功,直接返回转换后的整数;失败则在except块里用user_input提示具体的无效值
  • 去掉了不必要的全局变量,代码逻辑更清晰,也避免了全局变量带来的意外问题

如果一定要保留全局变量的写法(不推荐),可以先把输入赋值给x再转换:

x = None

def main():
    global x
    x = get_int()
    print(f"x = {x}")

def get_int():
    global x
    while True:
        x = input("Enter an integer: ")
        try:
            return int(x)
        except ValueError:
            print(f"{x} is invalid. Expecting an integer")

if __name__ == "__main__":
    main()

这里先把输入的原始值赋值给全局变量x,再尝试转换,这样转换失败时x已经是用户输入的无效值,except块就能正确引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:12:38