gpt4 book ai didi

python - Python 中断言失败

转载 作者:行者123 更新时间:2023-11-30 23:38:26 25 4
gpt4 key购买 nike

我有这个代码:

/server/frontend/wsn.py
Line 866:
netid = hextransform(int(nid), 16)

Line 156:
def hextransform(data, length):
data = hex(data)[2:]
assert(len(data) <= length)
# zero-padding
data = ('0' * (length - len(data))) + data
# Swap 'bytes' in the network ID
data = list(data)
for i in range(0, length, 2):
tmp = data[i]
data[i] = data[i + 1]
data[i + 1] = tmp
# Reverse the whole string (TODO: CHECK)
data.reverse()
#data = "".join(data)
return data

我的问题是当我有一个 nid = 15579202759033880576 时。是不是太长了?

我从 Tornado 收到的错误是这样的:

Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/tornado/web.py", line 988, in _execute
getattr(self, self.request.method.lower())(*args, **kwargs)
File "/usr/lib/python2.6/site-packages/tornado/web.py", line 1739, in wrapper
return method(self, *args, **kwargs)
File "./wsn.py", line 866, in get
netid = hextransform(int(nid), 16)
File "./wsn.py", line 158, in hextransform
assert(len(data) <= length)
AssertionError

但是十六进制的netid0xd834725e00000000并且len(nid) = 16

我不知道问题出在哪里。

最佳答案

Python 为长数字添加了一个 L:

>>> hex(int(15579202759033880576))
'0xd834725e00000000L'

再添加一个角色。使用不同的方法创建十六进制数字:

format(data, '016x')

相反。 format() function让您使用format spec mini language转换您的数据;在本例中,x 是小写的十六进制表示形式,您不需要对任何内容进行切片:

>>> format(15579202759033880576, '016x')
'd834725e00000000'

注意格式中的 016;如果您的号码小于 16 位十六进制数字,则会用零填充:

>>> format(1557920, '016x')
'000000000017c5a0'

你的字节交换也可以更容易地完成; python 支持多重赋值,让您无需临时变量即可交换两个值:

for i in range(0, length, 2):
data[i], data[i + 1] = data[i + 1], data[i]

因此,您的 hextransform 方法可以简化为:

def hextransform(data, length):
data = format(data, '0{0}x'.format(length))
assert(len(data) == length), '{0!r}, {1}'.format(data, length)
# Swap 'bytes' in the network ID
data = list(data)
for i in range(0, length, 2):
data[i], data[i + 1] = data[i + 1], data[i]
data.reverse()
return data

结果:

>>> hextransform(15579202759033880576, 16)
['0', '0', '0', '0', '0', '0', '0', '0', '5', 'e', '7', '2', '3', '4', 'd', '8']

关于python - Python 中断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14525478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com