Variable in Befehl einbauen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
fenestro
User
Beiträge: 13
Registriert: Sonntag 20. Oktober 2013, 00:33

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
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@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'])
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
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.
fenestro
User
Beiträge: 13
Registriert: Sonntag 20. Oktober 2013, 00:33

Vielen Dank Leute!
Mein Script arbeitet jetzt Problemlos :D

mfg
Fenestro
Antworten