【发布时间】:2019-01-11 12:30:51
【问题描述】:
我正在尝试修改开源 python 脚本以接受字符串而不是整数。 以下是原python代码:
def request(self, value):
packet=''
if self.domain:
packet+=self.data[:2] + "\x81\x80"
packet+=self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00'
packet+=self.data[12:]
packet+='\xc0\x0c'
packet+='\x00\x01\x00\x01\x00\x00\x00\x3c\x00\x04'
packet+=str.join('',map(lambda x: chr(int(x)), value.split('.')))
这适用于整数并且不会出现错误。
我想修改它以使用字符串而不是数据包,所以我尝试将int 修改为str,如下所示:
def request(self, value):
packet=''
if self.domain:
packet+=self.data[:2] + "\x81\x80"
packet+=self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00'
packet+=self.data[12:]
packet+='\xc0\x0c'
packet+='\x00\x01\x00\x01\x00\x00\x00\x3c\x00\x04'
packet+=str.join('',map(lambda x: chr(str(x)), value.split('.')))
return packet
但是,当我输入一个字符串作为value 参数的值时,我收到以下错误:
Traceback (most recent call last):
File "test.py", line 39, in <module>
udps.sendto(p.request(value), addr)
File "test.py", line 25, in request
packet+=str.join('',map(lambda x: chr(str(x)), value.split('.')))
File "test.py", line 25, in <lambda>
packet+=str.join('',map(lambda x: chr(str(x)), value.split('.')))
TypeError: an integer is required
如何修改第 25 行以接受字符串而不仅仅是整数?我仍然需要字符串join 函数。
【问题讨论】:
-
您希望
chr(str(x))做什么?chr接受一个整数并将其转换为它的 ascii 字符值。当然,当你传递一个字符串时它会失败。你能给我们举个例子说明value的样子吗? -
感谢您的帮助,现在可以使用了。
标签: python string python-2.7 integer packet