在这里忍受我;我是一个系统管理员而不是开发人员。以下代码对我来说很好。但是,当我将其分成两个文件以便该类在一个文件中并且逻辑在另一个文件中时,我得到一个错误,即data [0]是str并且不支持赋值
条纹下载工作示例
class partition:
def __init__(self):
self.data = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
return
def boot_flag(self, value=None):
if value is not None:
self.data[0] = value
return
else:
return self.data[0:1][::-1]
part1 = partition()
print str(part1.data).encode('hex')
value = b"\xff"
part1.boot_flag(value)
print str(part1.data).encode('hex')
这是现在的全班。
class partition:
def __init__(self):
self.data = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
def boot_flag(self, value=None):
if value is not None:
self.data[0] = value
return
else:
return self.data[0:1][::-1]
def start_chs(self, value=None):
if value is not None:
self.data[1:4] = value
return
else:
return self.data[1:4][::-1]
def type(self, value=None):
if value is not None:
self.data[4:5] = value
return
else:
return self.data[4:5][::-1]
def end_chs(self, value=None):
if value is not None:
self.data[5:8] = value
else:
return self.data[5:8][::-1]
def start_lba(self, value=None):
if value is not None:
self.data[8:12] = value
else:
return self.data[8:12][::-1]
def sectors(self, value=None):
if value is not None:
self.data[12:16] = value
else:
return self.data[12:16][::-1]
def load(self, data):
self.data = data
return
这是我用来测试课程的测试夹具。
import dospart
disk = open('/dev/sda', 'rb')
mbr = disk.read(512)
part1 = dospart.partition()
part1.load(mbr[446:462])
print str(part1.data).encode('hex')
part1.boot_flag(b"\xff")
print str(part1.data).encode('hex')
这是错误
Traceback (most recent call last):
File "test.py", line 13, in <module>
part1.boot_flag(b"\xff")
File "/Users/digitaladdictions/PycharmProjects/dospart/dospart.py", line 9, in boot_flag
self.data[0] = value
TypeError: 'str' object does not support item assignment
请注意,我可以很好地阅读这些值。当我尝试写入self.data []
时,我只收到错误[UPDATE]
根据接受的答案,这是我的新加载功能。
def load(self, data):
part = bytearray(data)
self.data = part
return
答案 0 :(得分:2)
我认为这就是正在发生的事情。当您调用时:
part1.load(mbr[446:462])
self.data
被分配了一个字符串。那一点,self.data
是一个字符串而不是字节数组。所以当你这样做时
part1.boot_flag(b"\xff")
它正确地抱怨TypeError: 'str' object does not support item assignment
这就是我的意思:
>>> data_one = "My name is shaktimaan"
>>> data_two = data_one[5:10]
>>> type(data_one)
<type 'str'>
在第一种情况下,没有load
的调用,因此self.data
仍然是一个字节数组(在调用构造函数之后)。因此,boot_flag
可以正常运行而不会抱怨。
我认为您需要修复load
中的代码以将字节数组分配给self.data
答案 1 :(得分:0)
你不能在地方改变Python字符串,它们是不可变的。您可以找到很多关于该错误的评论“'str'对象不支持项目指定者”。如果将它合并到一个文件中,我不知道它是如何工作的。