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

Python求输入数字最值时报错:int与str比较的TypeError问题

问题:输入数字求最大最小值时出现类型错误

我尝试编写代码找出输入数字中的最大值和最小值,但运行时出现错误。代码如下:

largest = None
smallest = None

while True:
    num = input("Enter a number: ")

    if (num == "done"):
        break
    try:        
        int(num)       
        
    except:
        print("Invalid input")
        continue 

    if largest == None or int(num) > largest:
        largest = num
    elif smallest == None or int(num) < smallest:
        smallest = num
    
print("Maximum is", largest)
print("Minimum is", smallest)

例如,输入33再输入8时,出现如下报错:

Traceback (most recent call last):
  File "/home/td/tmp/g/test.py", line 16, in <module>
    if largest == None or int(num) > largest:
TypeError: '>' not supported between instances of 'int' and 'str'

错误原因

核心问题是类型不匹配:你在try块里把输入的字符串转成了int,但没有保存这个转换后的值。后续比较时,int(num)是整数类型,而largest被赋值为原始的字符串num,整数和字符串无法直接比较大小,所以抛出了TypeError。另外,最小值判断用elif会导致第一次输入数字时,smallest无法被赋值,逻辑存在漏洞。

修正后的代码

把转换后的整数保存到变量里,后续的比较和赋值都使用这个整数变量,同时调整最小值的判断逻辑:

largest = None
smallest = None

while True:
    num_input = input("Enter a number: ")

    if num_input == "done":
        break
    try:        
        num = int(num_input)  # 保存转换后的整数
    except ValueError:
        print("Invalid input")
        continue 

    if largest is None or num > largest:
        largest = num
    if smallest is None or num < smallest:  # 改用独立的if判断,确保第一次输入时最小值也能被赋值
        smallest = num
    
print("Maximum is", largest)
print("Minimum is", smallest)

额外优化点

  1. 输入变量和转换后的变量分开命名(num_input和num),避免混淆
  2. 异常捕获更精准,只捕获ValueError而非所有异常,避免掩盖其他问题
  3. 用is None替代== None,这是Python中判断空值的标准写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:01:07