web-dev-qa-db-fra.com

J'obtiens cette erreur "TypeError: str () prend au plus 1 argument (2 donné)" à la variable "client_response"

MODIFIER au format:

Ceci est le code d'origine

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

Je reçois cette erreur "TypeError: str () prend au plus 1 argument (2 donné)" à la variable "client_response"

5
Ahsan Javaid

Vous avez votre erreur ici:

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

Changez-le simplement en:

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

Sur l'avant-dernière ligne, vous passez deux arguments à la fonction str, bien que la fonction str ne prenne qu'un seul argument dans Python 2. Il prend en fait jusqu'à trois arguments dans python 3

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

Donc, vous essayez d'exécuter par inadvertance python 3 code dans un interpréteur python 2) ou vous consultez la mauvaise documentation de langue.

Donc, soit utilisez la réponse de @ franciscosolimas, si vous utilisez python 2, ou assurez-vous que vous utilisez python 3, si ce dernier vous pouvez également vouloir pour ajouter un argument de mot clé juste pour vous assurer que vous savez ce qui se passe à l'avenir

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

3 arguments, 5 donnés

J'ai eu une erreur similaire, peut-être pas la même ici (comme l'op) mais, c'était assez simple à corriger et je voulais partager, car je me suis retrouvé ici à partir de mes recherches sur l'erreur.

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

Qu'est-ce qui l'a corrigé pour moi dans python3 convertissait mon , à +

Erreur:

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';"))

Fixé:

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';")

J'ai dû ajouter mes propres espaces pour que la requête passed fonctionne. Comme les virgules le faisaient en python ...

Réflexions et supposition éclairée: on dirait que dans mon cas, il a été rattrapé en essayant d'évaluer en bash/python un littéral u'

À ma connaissance, cette coupure pourrait être en bash car il n'y a pas de commande appelée u et/ou en python u' essayez-vous de unicode une chaîne incomplète. Quoi qu'il en soit, il s'est cassé et a voulu partager ma solution.

À votre santé!

~ JayRizzo

0
JayRizzo