Traceback (most recent call last):
File "/gpio/processoronoff.py", line 22, in <module>
substitute_lines('/var/www/lol.txt', 2,3, ['1\n'])
File "/gpio/processoronoff.py", line 18, in substitute_lines
os.remove(tmp_file)
TypeError: coercing to Unicode: need string or buffer, file found
Variable in Befehl einbauen
@fenestro: das ist nur ein Code-Ausschnitt. Für ein richtiges Programm fehlt natürlich noch so einiges:
Code: Alles auswählen
import os
import itertools
import shutil
def substitute_with(iterable, start, stop, content):
iterable = iter(iterable)
return itertools.chain(
itertools.islice(iterable, start), content, itertools.islice(iterable, stop-start, None)
)
def substitute_lines(filename, start, stop, content):
tmp_filename = '{}.tmp'.format(filename)
with open(filename, mode='r') as orig_file:
with open(tmp_filename, mode='w') as tmp_file:
try:
tmp_file.writelines(
substitute_with(orig_file, start, stop, content)
)
except Exception:
os.remove(tmp_filename)
raise
shutil.move(tmp_filename, filename)
if __name__ == '__main__':
substitute_lines('lol.txt', 2,3, ['1\n'])
Was meinst Du damit? Die beiden Funktionen laufen doch in jedem Fall (imports vorausgesetzt). Oder anderst gefragt: Wie interpretierst Du die Fehlermeldung TypeError: coercing to Unicode: need string or buffer, file found in diesem Zusammenhang? Ich kann mir nämlich überhaupt nicht erklären, wie es hier zu dieser Meldung kommen kann.Sirius3 hat geschrieben:das ist nur ein Code-Ausschnitt.
Ich frage deshalb, weil mir diese Fehlermeldung schon des öfteren nicht klar war und ich vermute, dass der Fehlergrund manchmal nicht ... need string or buffer, file found ist. Kann das sein?
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Sirius hat noch klammheimlich den relevanten Fehler korrigiert: `os.remove` bekam im ersten Code das file Objekt, statt dem Dateinamen.
In dem Fall ist die Fehlermeldung also "spot on"
Ich denke es waere auch besser `with` im `try` Block zu haben, statt anders herum. So wird die Datei erst geschlossen, bevor versucht wird sie zu loeschen.
In dem Fall ist die Fehlermeldung also "spot on"
Ich denke es waere auch besser `with` im `try` Block zu haben, statt anders herum. So wird die Datei erst geschlossen, bevor versucht wird sie zu loeschen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte