TypeError: str, bytes or bytearray expected, not list

TypeError: str, bytes or bytearray expected, not list

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

TypeError:应为 str、bytes 或 bytearray,而不是列表

这是我使用的代码:

    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,那就太好了。

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

此外,您使用了 try 块而不使用 exceptfinally。这将导致错误。

您可以将 catch() 放在 try-except 块中,如下所示:

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

改变

check(ips, "80) 

对于

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

link.connect 需要一个唯一的 ip 而你正在传递一个 ips 列表。