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

Python实现hex/int/bin进制转换时报TypeError错误求助

问题排查

核心错误原因

  • 第一行输入处理逻辑错误:你直接用int(input("Enter a number? "))是按照十进制规则解析输入的数字字符串,如果你输入的是二进制的101、十六进制的3F,这一步就已经解析错误,比如你输入二进制的101,这里会直接当成十进制的101处理,完全不符合预期。
  • 后续处理2进制、16进制原数时,错误调用hex()/bin()处理已经是int类型的数值:hex()和bin()函数返回的都是带前缀的字符串,你把数值转成字符串之后再传给bin()/int(),自然就会报类型错误。
    就你给出的报错场景举例:输入38,原base是16,你第一行就把38按十进制转成了整数38,然后执行numberToConvert=hex(numberToConvert),把38转成了字符串'0x26',之后调用bin(numberToConvert)的时候传入的是字符串,直接触发类型错误。

修复方案

调整输入处理逻辑:输入的数字先存为字符串,再根据用户输入的原base转成整数,后续所有转换都基于这个统一的整数处理,逻辑会简洁很多,也不会出类型错误。
修复后的代码如下:

# 输入先存为字符串,避免不同进制输入解析错误
number_str = input("Enter a number? ")
base = int(input("Base of the number? "))
toConvertBase = int(input("Base wanted? "))

if base == toConvertBase:
    print("Error: Same base.")
elif base not in (2, 10, 16) or toConvertBase not in (2, 10, 16):
    print("Error: Not a supported base")
else:
    # 统一把输入按原base转成十进制整数,再转目标进制
    num = int(number_str, base)
    if toConvertBase == 2:
        result = bin(num)[2:]
    elif toConvertBase == 10:
        result = str(num)
    elif toConvertBase == 16:
        result = hex(num)[2:]
    print(f"Result is {result}")

修复说明

  • 输入的数字先以字符串形式存储,调用int(字符串, 原进制)就能直接按对应进制解析成整数,兼容2、10、16进制的输入
  • 去掉冗余的分支判断,相同base的判断直接提前,不需要每个分支都写一遍
  • 所有转换都基于统一解析后的整数处理,不会出现字符串和数值混用的类型错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:15:07