【问题标题】:TypeError: integer required occuring when sending packetTypeError:发送数据包时需要整数
【发布时间】: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


【解决方案1】:

chr() 接受一个整数并返回一个字符串。您正在向它传递一个字符串chr(str(x))。你要么想要chr(x)要么str(x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2019-03-22
    • 2018-05-04
    • 2021-03-05
    • 2015-08-10
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多