web-dev-qa-db-ja.com

「client_response」変数でこのエラー「TypeError:str()は最大で1つの引数(2つ指定)」を受け取ります

編集してフォーマット:

これは元のコードです

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()

「client_response」変数でこのエラー「TypeError:str()は最大で1つの引数(与えられた2)を受け取ります」を受け取ります

5
Ahsan Javaid

ここにエラーがあります:

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

それを次のように変更してください:

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

最後から2行目では、2つの引数をstr関数に渡しますが、str関数はPython 2。実際にはpython 3で最大3つの引数を取ります

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

したがって、python 3のコードをpython 2インタープリタで3つコードを誤って実行するか、間違った言語のドキュメントを参照しています。

したがって、python 2を使用している場合は@franciscosolimasの回答を使用するか、python 3を使用していることを確認してください。後者の場合は、キーワード引数を追加して、将来何が起きているかを確実に把握する

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

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'

私の知る限り、uと呼ばれるコマンドがないか、python u'unicode不完全な文字列。いずれかの方法で壊れて、私の修正を共有したかった。

乾杯!

〜JayRizzo

0
JayRizzo