2016-03-19 259 views
-1
f = open("key.txt", 'rb') 
k= f.read() 
def bits(f): 
    bytes = (ord(k) for k in f.read()) 
    for k in bytes: 
     for i in xrange(8): 
      yield (k >> i) & 1 
for k in bits(open('key.txt', 'r')): 
    print k 

kt= [k[57],k[2],k[4],k[43]] 

print kt 

我得到它说“诠释”对象有没有属性“__getitem__”

Traceback (most recent call last): 
    File "k.py", line 11, in <module> 
    kt= [k[57],k[2],k[4],k[43]] 
TypeError: 'int' object has no attribute '__getitem__' 

如何纠正它的错误?

+0

一些更多的细节,如'什么是输入文件喜欢'会很好。 – Muctadir

+0

你已经做了'打印k' - 它向你展示了什么? – MSeifert

回答

0

由于bits()将产生被分配给k上线for k in bits(open('key.txt', 'r')):上线kt= [k[57],k[2],k[4],k[43]]索引操作者自然会失败,因为int没有__getitem__定义的整数。

0

你需要给bits(...)一个名字:

x = list(bits(open('key.txt', 'r'))) 
for k in x: 
    print k 

kt = [x[57], x[2], x[4], x[43]] 

此致是行不通的,因为k被分配到每个项目中bits(...)。一旦for循环完成,它仍然等于最后一个项目。相反,你需要给整个事情一个名字。

0

在你正在做的一开始,

k = f.read() 

而且当你正在尝试做的后,

kt= [k[57],k[2],k[4],k[43]] 

你基本上是使用第一k,因为这是唯一k可视距离这个范围。因此,你正在得到错误。

您可能想要删除循环并执行此类操作。

k = list(bits(open('file.txt', 'r')))  
kt = [k[57], k[2], k[4], k[43]]  
print kt 
相关问题