return einer Funktion

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.
Antworten
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Montag 31. März 2008, 16:30

Hi.
Ich habe ein Nebenfunktion, die eine routine abarbeitet.
Gleichzeitig benutze ich in der Funktion einen String, welcher der Dateiname ist. Dieser wird in dieser Funktion erst generiert.
Jetzt möchte ich, das ich einen return werte bekomme, welcher diesen Dateinamen enthält.
Die Variable, in der dieser String (Dateiname) steht, erstelle ich in der Funktion und hole ihn aus der funktion mit

Code: Alles auswählen

return dateiname
heraus.

Wenn ich jetzt jedoch diese Variable an eine andere Funktion übergeben, erhalte ich in der Funktion nicht mehr meinen String sondern den Typ der variable.
Mittels print-befehl auf die variable 'dateiname' sehe ich dann folgendes im Terminal:
<type 'file'>
Was mache ich da falsch?
Thx
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Montag 31. März 2008, 16:43

Meine Glaskugel meint das dein Code in etwa so aussieht:

Code: Alles auswählen

dateiname=file('/path/to/file/myfile/','wb')
Übergeben solltest du aber:

Code: Alles auswählen

dateiname='/path/to/file/myfile/'
Allerdings könnten wir dir besser helfen, wenn du uns mal den betreffenden Code zeigst......

Siehe dazu auch : hier!
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Dienstag 1. April 2008, 08:01

hier der teil des codes, in welcher die variable mit dem dateinamen "gefüttert "wird (in file steht der dateiname)

Code: Alles auswählen

def process_file(fn):
	filename = logfile_entry.get()
	outfilename = filename + '_zwischen.txt'
	file = str(outfilename.split('/')[-1])
	print file
und hier soll der dateiname widerverwendet werden

Code: Alles auswählen

def auswertung(datei):
	print '\nstarte Auswertung ...'
	print datei
	original = open(datei, "r")
diese funktion wird mittels

Code: Alles auswählen

auswertung(file)
aufgerufen
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Dienstag 1. April 2008, 08:28

Also bei 'file' würde ich eher einen Handler auf die Datei erwarten als einen String mit dem Dateinamen. Du solltest auch aus einem anderen Grund deine Namensgebung überdenken: 'file' ist nämlich eine eingebaute Funktion zum Öffnen von Dateien, die du auf diese Weise überschreibst und damit nicht mehr so einfach verwenden kannst.

Ansonsten teste doch mal, ob logfile_entry.get() dir auch wirklich einen String zurückliefert. Ich kann das hier nämlich nicht.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Dienstag 1. April 2008, 08:35

Moin,
The Spirit hat geschrieben:hier der teil des codes, in welcher die variable mit dem dateinamen "gefüttert "wird (in file steht der dateiname)

Code: Alles auswählen

def process_file(fn):
	filename = logfile_entry.get()
	outfilename = filename + '_zwischen.txt'
	file = str(outfilename.split('/')[-1])
	print file
oben hast du noch geschrieben, dass du return verwendest. Hier hast du ein print. Das kann nicht funktionieren. Außerdem ist file ein built-in - diesen solltest du als Namen gar nicht verwenden.

Code: Alles auswählen

auswertung(file)
Da file ein built-in ist und ein Typ, übergibst du hier deiner Funktion auswertung lediglich den Typ file. Du wirst vor diesem Aufruf file gar nichts Neues zuweisen:

Code: Alles auswählen

file = process_file(blubber) # diese Fkt sollte mit return einen String zurückgeben!
auswertung(file)
Aber wie gesagt: file als Variablennamen zu verwenden ist eine schlechte Idee.
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Dienstag 1. April 2008, 09:10

sorry, das

Code: Alles auswählen

return file
hatte ich vergessen zu posten, da zwischendrin noch ein wenig code ist
danke für den tip, werd ich gleich mal testen
Antworten