Seite 2 von 2
Re: Variable in Befehl einbauen
Verfasst: Freitag 3. Januar 2014, 22:53
von fenestro
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
Re: Variable in Befehl einbauen
Verfasst: Freitag 3. Januar 2014, 23:05
von Sirius3
@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'])
Re: Variable in Befehl einbauen
Verfasst: Samstag 4. Januar 2014, 17:03
von mutetella
Sirius3 hat geschrieben:das ist nur ein Code-Ausschnitt.
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.
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
Re: Variable in Befehl einbauen
Verfasst: Samstag 4. Januar 2014, 17:16
von cofi
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.
Re: Variable in Befehl einbauen
Verfasst: Sonntag 5. Januar 2014, 17:55
von fenestro
Vielen Dank Leute!
Mein Script arbeitet jetzt Problemlos
mfg
Fenestro