2017-12-01 3 views
0

Ich schreibe ein Chatbot-Programm mit Python und wenn ich meinen Code ausführen, erhalte ich den folgenden Fehler.TypeError: open() hat ein unerwartetes Schlüsselwort Argument 'Pufferung'

Traceback (most recent call last): 
    File "C:/Users/stephen/AppData/Local/Programs/Python/Python35/chatbot.py", line 97, in <module> 
    with bz2.open("C:/RC_{}".format(timeframe.split('-')[0],timeframe), buffering=1000) as f: 
TypeError: open() got an unexpected keyword argument 'buffering' 

Konnte keine Informationen online bezüglich des Fehlers finden. Alles, was ich gesehen habe, war vielleicht, dass es ein Bug war und ich sollte es Python melden. Derzeit läuft python3.5.3. Dies ist der Teil des Codes, der den Fehler verursacht.

with bz2.open("C:/RC_{}".format(timeframe.split('-')[0],timeframe), buffering=1000) as f: 
    for row in f: 
     row_counter += 1 
     parent_id = row['parent_id'] 
     body = format_data(row['body']) 
     created_utc = row['created_utc'] 
     score = row['score'] 
     comment_id = row['name'] 
     subreddit = row['subreddit'] 
     parent_data = find_parent(parent_id) 
+0

Bitte nehmen Sie sich den Moment Zeit, um Ihre Frage in etwas lesbares zu formatieren. – Shadow

+0

Entfernen Sie einfach das Argument 'buffering = 1000' - sind Sie sicher, dass dies die richtige Signatur der' open' Methode ist? Vielleicht möchten Sie stattdessen 'bz2.BZ2File'. –

+1

Es scheint unwahrscheinlich, dass Sie den Fehler melden müssen "Funktion nimmt kein Argument, das es definiert ist, nicht zu nehmen" zu Python. – donkopotamus

Antwort

1

Der Fehler ist sehr deutlich:

TypeError: open() got an unexpected keyword argument 'buffering' 

Eine einfache Überprüfung der Dokumentation für bz2.open würde dann zeigen Sie, dass diese Funktion nicht buffering Argument nimmt.

So einfach entfernen Sie es.

1

The bz2.open function nimmt kein buffering Argument. Auch bz2.BZ2File, die buffering nimmt, ausdrücklich bemerkt:

The buffering argument is ignored. Its use is deprecated.

Buffering Argumente für Kompressoren ein bisschen unsinnig sind; Sie haben Puffer bis zu einem gewissen Grad, da, wenn Sie X Menge von Daten anfordern, müssen sie möglicherweise einen Block unbekannter Endgröße dekomprimieren, um es zu bekommen, so dass sie entweder den gesamten Block dekomprimieren und die unkomprimierten Daten darüber hinaus puffern Die X-Anforderung oder das Beenden der Dekomprimierung, wenn sie X erreichen, das Puffern der komprimierten Daten (und sie müssen möglicherweise noch einige unkomprimierte Daten zwischenspeichern, da das Dekomprimieren eines einzelnen Bytes aus einem Stream viele Ausgangsbyte erzeugen kann).

Punkt ist, gibt es keine vernünftige Möglichkeit, Pufferung zu deaktivieren oder zu begrenzen; Die Bedürfnisse des Kompressors bedeuten, dass Sie dieses Kontrollniveau nicht haben.

Verwandte Themen