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
相关产品推荐
相关产品推荐

