我收到此错误" TypeError:str()最多需要1个参数(2个给定)" at" client_response"变量

时间:2017-02-20 14:19:30

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

编辑格式:

这是原始代码

from __future__ import print_function
import socket
import sys

def socket_accept():
    conn, address = s.accept()
    print("Connection has been established | " + "IP " + address[0] + "| Port " + str(address[1]))
    send_commands(conn)
    conn.close()

def send_commands(conn):
    while True:
        cmd = raw_input()
        if cmd == 'quit':
            conn.close()
            s.close()
            sys.exit()
        if len(str.encode(cmd)) > 0:
            conn.send(str.encode(cmd))
            client_response = str(conn.recv(1024), "utf-8")
            print(client_response, end ="")

def main():
    socket_accept()
    main()

我收到此错误“TypeError:str()最多需要1个参数(2个给定)”at“client_response”variable

3 个答案:

答案 0 :(得分:12)

你的错误在这里:

client_response = str(conn.recv(1024), "utf-8")

只需将其更改为:

client_response = str(conn.recv(1024)).encode("utf-8")

答案 1 :(得分:6)

在倒数第二行,您将两个参数传递给str函数,尽管str函数在Python 2中只接受一个参数。事实上它确实需要python 3中的三个参数

https://docs.python.org/2.7/library/functions.html?highlight=str#str https://docs.python.org/3.6/library/functions.html?highlight=str#str

所以你要么试图在python 2解释器中无意中运行python 3代码,要么你正在查看错误的语言文档。

所以要么使用@franciscosolimas的回答,如果你正在使用python 2,要么确保你使用python 3,如果后者你可能也想要添加一个关键字参数确保你知道将来会发生什么

client_response = str(conn.recv(1024), encoding="utf-8")

答案 2 :(得分:0)

3个参数,给定5个

我遇到了类似的错误,这里的错误可能与操作不同(但与操作不同),但是它很简单,可以共享,因为我从错误的搜索中得到了答案。

Traceback (most recent call last):
File "queries.py", line 50, in <module>
"WHERE ao.type='u';")
TypeError: str() takes at most 3 arguments (5 given)`
  

python3中为我解决的问题是将我的,转换为+

错误:

str("SELECT s.name + '.' + ao.name, s.name"
            "FROM sys.all_objects ao",
            "INNER JOIN sys.schemas s",
            "ON s.schema_id = ao.schema_id",
            "WHERE ao.type='u';"))

已修复:

str("SELECT s.name + '.' + ao.name, s.name " +
            "FROM sys.all_objects ao " +
            "INNER JOIN sys.schemas s " +
            "ON s.schema_id = ao.schema_id " +
            "WHERE ao.type='u';")

我必须添加自己的空格,才能使用passed查询。 逗号在python中执行时...

思想和我的有根据的猜测: 在我的情况下,尝试在bash / python中评估乱码u'

据我所知,此中断可能在bash中,因为没有名为u的命令,和/或在Python u'中,您是试图unicode的不完整字符串。不管哪种方式,它都坏了,想分享我的补丁。

干杯!

〜JayRizzo