Python中int(x, base)函数报错原因咨询:基数异常与无效字面量
搞懂Python int()函数的这几个报错问题
嘿,作为编程新手遇到这种报错太正常了,我来帮你逐个拆解清楚原因:
第一个报错:int('23123',1) 触发 ValueError: int() base must be >= 2 and <= 36
Python里的int(x, base)函数,第二个参数base(基数)的合法范围是2到36,这可不是随便定的:
- 基数为1的话,根本没有有效的数字表示逻辑——总不能只用0来表达所有数吧?完全没有实用价值
- 上限设为36是因为我们用0-9(10个)加上a-z(26个,不区分大小写)来对应不同基数的数字,a代表10,b代表11……z代表35,加起来刚好36个可用字符
所以你传base=1肯定会触发这个范围错误。
第二个报错:int('123',3) 触发 ValueError: invalid literal for int() with base 3: '123'
当你指定base=3时,意味着要转换的是三进制数,而三进制数的每一位只能是0、1、2,绝对不能出现3!
你传入的字符串是'123',最后一位的3已经超出了三进制允许的数字范围(必须小于基数),所以Python会判定这个字符串是无效的三进制字面量。
举个正确的例子:int('122',3) 是合法的,计算结果是 1*3² + 2*3 + 2 = 9 + 6 + 2 = 17。
第三个报错:ValueError: int() base must be >= 2 and <= 36 but using 3 is invalid?
这个报错是你混淆了规则导致的——base=3本身是在合法范围内的,但你传入的字符串不符合三进制的要求(比如像第二个例子里包含了3),所以才会出现这种看似矛盾的提示,核心问题还是字符串里的字符和指定的基数不匹配。
最后总结一下使用int(x, base)的关键规则:
- 基数
base必须在2到36之间(包含两端) - 要转换的字符串
x里的每一个字符,对应的数值必须小于指定的base(比如base=16的话,字符可以是0-9、a-f,因为f对应15 < 16)
内容的提问来源于stack exchange,提问作者Llallum
相关产品推荐
相关产品推荐

