python ValueError:基为2的int()的文本无效

2024-05-13 04:56:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我在以下几行中有错误。错误不是反复出现的,只是有时

x,y are huge numbers of 2048 bits
z=bin(x)+bin(y)
z=int(z,2)

ValueError: invalid literal for int() with base 2: '10010101101001011011000000001111001110111110000100101000000011111111100000111010111011101111110010001101101001101000100000001100010011000010100000110100100001010110011111101101000101101001011001100110'

Tags: offorbasebin错误witharebits
3条回答

你确定你没有伪造错误信息吗?

密码。。。

>>> int('10010101101001011011000000001111001110111110000100101000000011111111100000111010111011101111110010001101101001101000100000001100010011000010100000110100100001010110011111101101000101101001011001100110', 2)
939350809951131205472627037306557272273273866819979105965670L

…对我有用。

还有,你的代码的一个具体例子。。。

>>> x = 82349832
>>> y = 23432984
>>> z = bin(x) + bin(y)
>>> int(z, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '0b1001110100010001111000010000b1011001011000111100011000'

…显示错误消息中的问题(即0b前缀)。

解决的办法是用。。。

z = bin(x)[2:] + bin(y)[2:]
z = int(z, 2)

…或者,正如Martijn Pieters建议的那样,使用format()生成不带前缀的二进制表示。。。

z = format(x, 'b') + format(y, 'b')
z = int(z, 2)

…或者,正如gnibbler建议的那样,使用string对象的format()方法在一个调用中完成它。。。

z = '{:b}{:b}'.format(x, y)
z = int(z, 2)

bin将返回以下格式的字符串:

'0b1100000011001011101000111010110011'

与第一个'0b'

所以,对于您的代码,可以使用这个(将xy作为整数):

z=int(bin(x)[2:], 2) + int(bin(y)[2:], 2)

或者,如果您希望首先将xy具体化为字符串:

z=bin(x)[2:]+bin(y)[2:]
z=int(z,2)

bin为您提供了一个字符串表示,因此bin( .. ) + bin( .. )将两个字符串连接起来,这不是有效的结果。

>>> bin(0) + bin(1)
'0b00b1'

如果您试图使用实际的二进制数据(而不是二进制数据的整数表示的字符串表示,这是您的代码所做的),那么您应该使用^{} module

相关问题 更多 >