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

Python 3如何在转换变量类型前预判是否会引发程序崩溃?

解决userinput函数类型转换崩溃问题

你的问题出在直接调用int()或float()转换非数字输入时,会触发ValueError异常导致程序崩溃,同时原代码里的类型判断逻辑也存在错误(type(a) != valtype中valtype是字符串,而type(a)返回的是类型对象,两者永远不相等)。以下是修复后的代码:

import time

def userinput(text, valan, valtype):
    if valan == 0 and valtype == 0:
        return input(text)
    elif valan == 0 and valtype != 0:
        while True:
            a = input(text)
            try:
                if valtype == "int":
                    a = int(a)
                elif valtype == "float":
                    a = float(a)
                # 转换成功直接返回结果
                return a
            except ValueError:
                print("Invalid answer.")
                time.sleep(1)
                print("Try again.")
                time.sleep(1)
    elif valan != 0 and valtype == 0:
        while True:
            a = input(text)
            if a in valan:
                return a
            print("Invalid answer.")
            time.sleep(1)
            print("Try again.")
            time.sleep(1)

关键改动说明

  • 新增try-except块捕获类型转换时的ValueError,输入无法转换为指定类型时,提示错误并重新发起输入
  • 简化循环逻辑,去掉冗余的val标记,转换成功或输入符合选项时直接返回结果,代码更简洁高效
  • 修复原代码中类型判断的逻辑错误,不再用type(a)和字符串类型名对比,通过转换是否成功验证输入有效性
  • 补充import time语句,避免调用time.sleep时出现导入错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:43:19