TypeError:str,bytes或bytearray expected,not list

时间:2018-04-21 13:17:15

标签: python python-3.x python-sockets

所以我试图从文本文件中提取一些IP并在套接字连接中使用该列表。我的问题是我一直收到以下错误:

TypeError:str,bytes或bytearray expected,not list

以下是使用的代码:

    import socket

     ips = open('list.txt', 'r').readlines()

     def displayType(sec_type):
       switcher = {
        0: "1",
        1: "2",
        2: "3"
       } 
       print(' type: ' + str(sec_type) + ' (' + switcher.get(sec_type,"Not defined by IETF") +')' )

    try:
       def check(ip,port):
         link = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
         link.connect((ip,int(port)))
         link_ver = link.recv(12)
         print(link_ver)

         link.send(link_ver)
         nb_sec_types = ord(link.recv(1))
         print("types: " + str(nb_sec_types))

    check(ips,"80")

如果有人知道如何使用列表中的ip,那就太棒了。

2 个答案:

答案 0 :(得分:1)

更改

check(ips, "80) 

代表

for ip in ips: 
    check(ip, "80) 

link.connect期待一个唯一的ip,并且您传递的是ips列表。

答案 1 :(得分:0)

方法readlines()读取直到EOF并返回包含这些行的列表。所以你在ips中得到一个列表。您将需要遍历此列表并在每次迭代时调用check()。

此外,您使用了try阻止了exceptfinally。这将导致错误。

您可以将catch()放在try-except块中:

try:
 catch(ip, port)
except Exception as e:
 print(str(e))