我有以下示例代码:
test = 1011
test2 = int(test, 2)
print(test2)
这将引发错误
int() can't convert non-string with explicit base
当我将test
包装到str()
中时,该代码有效,因为int转换需要一个字符串作为输入。
我的问题:为什么会这样,并且在接受int时没有简单的方法可以基于基数进行转换?我发现整数转换方法需要一个字符串作为输入,这很违反直觉。
答案 0 :(得分:3)
因为将其应用于整数没有意义
在您的示例中,test
是一个数字。它没有基础。所有数字都是这样的:二进制0x1011,十进制11和十六进制0x0B是完全相同的数字。三种书写方式只是记录同一件事的不同方式,就像将汉字用作3一样。当然,在内部,计算机中以二进制表示的数字-例如0b1111110011
-但可以根据您的需要显示。仅在将数字转换为字符串或从字符串转换为数字时,基才有意义。
但是,如果您想使用二进制表示形式设置test
,则可以简单地编写:
test = 0b1011
答案 1 :(得分:2)
此功能仅适用于字符串,因为仅当您具有数字的字符串表示形式时,基才相关。
如果您有整数,则没有关联的基数,它是一个数字。然后,您可以将其表示为以2、16或10为基数的字符串(或任何其他所需的字符串)。