Seite 1 von 1

return einer Funktion

Verfasst: Montag 31. März 2008, 16:30
von The Spirit
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

Verfasst: Montag 31. März 2008, 16:43
von querdenker
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!

Verfasst: Dienstag 1. April 2008, 08:01
von The Spirit
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

Verfasst: Dienstag 1. April 2008, 08:28
von Jan-Peer
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.

Verfasst: Dienstag 1. April 2008, 08:35
von helduel
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.

Verfasst: Dienstag 1. April 2008, 09:10
von The Spirit
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