繁体   English   中英

Python len()不返回整数

[英]Python len() not returning whole numbers

我目前正在修改一些在Github上找到的代码。 适用于使用基于ath9k的无线卡的频谱分析仪。

无论如何,问题出在这里的这段代码:

sdata = struct.unpack_from("56B", data, pos)
pos += 56

# calculate power in dBm
sumsq_sample = 0
samples = []
for raw_sample in sdata:
    if raw_sample == 0:
        sample = 1
    else:
        sample = raw_sample << max_exp
    sumsq_sample += sample*sample
    samples.append(sample)

print (len(samples))

我希望最后一个打印语句始终产生值“ 56”,但是我遇到了一些奇怪的行为。 这是一些示例输出:

56
56
56
56
56
56
56S 15.952354 
56
56
56
56
56
56
56
56
56
56
56
56
56S 15.689883 
56
56S 16.510071 
56
56S 17.591084 
56S 18.358299 
56
56
56
56
56
56
56
56
56
56
56
56
56
56
56
56
56
56
56

这对我来说毫无意义。 我已经检查了len()和struct.unpack_from()的文档,但是还没找到。 样本应包含56个1字节整数,但有时会得到奇数,例如“ 56S 10.237633”

我正在修改的项目的Github存储库位于https://github.com/bcopeland/speccy上面的代码示例来自Spectrum_file.py,从第87行开始

有任何想法吗? 谢谢

如@kchomski所述,您的问题是由于程序的另一部分写入stderr所致。

我在speccy.py找到了以下代码speccy.py ,我相信这会导致意外的输出:

sys.stderr.write('FPS %f \r' % (sum(self.fps) / len(self.fps)))

MVCE将是以下内容:

import sys

sys.stderr.write('TOSTDERR\r')
print('54')

输出:

54STDERR

回车符\\r将光标移回该行的开头,然后在先前写入stderr的内容的顶部打印54

您可以通过将\\r切换为\\n来解决该问题,这将在输出到stderr的末尾添加新行,并避免出现覆盖问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM