open() - Problem

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
Mordred

Dienstag 15. Februar 2005, 13:34

Hallöchen zusammen,

ersteinmal der Code, dann die Problembeschreibung:

Code: Alles auswählen

def newgame():
    forget()
    if ng_entry.get()!="":
        pfad=ng_entry.get()
        if path.exists(pfad):
            fehler=Label(root, text="Name bereits vorhanden", font="Tahoma 7 bold")
            fehler.place(x=0, y=0)
        else:
            #mkdir(pfad)
            res=open('res1', 'w')
...
Ich habe ein Tkinter Fenster mit einem Entry-Feld. Dieses wird durch Buttonklick mit newgame() ausgewertet.
Wenn der entsprechende Pfad vorhanden ist, wird ein Fehler ausgegeben.
Wenn der Pfad nicht vorhanden ist wir er erstellt (im Moment deaktiviert).
Dann sollen Dateien erstellt werden (res=...) (nicht im neuen Verzeichniss, darum geht es ersteinmal nicht).

Es wird mir jedoch folgender Fehler ausgegeben:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
    return self.func(*args)
  File "C:\Dokumente und Einstellungen\...\start.py", line 16, in newgame
    res=open('res1', 'w')
TypeError: an integer is required
Ich habe bereits eine Datei erstellt, in welcher ebenfalls eine Datei erstellt wird (NUR eine Datei, sonst nichts), dort funktionier die Dateierstellung wunderbar.

Habe bereits andere Dateinamen probiert und Dateinamen in Variablen geschrieben und open(...) ohne res= probiert.

Hat jemand eine Idee wie ich dieses Problem beheben kann?[/python]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 15. Februar 2005, 13:45

Vermutlich hast du durch

Code: Alles auswählen

from irgendeinmodul import *
das builtin open() durch ein anderes open() ersetzt. Von * imports rate ich generell ab, das sieht man oft in Tkinter Programmen und ist eher schlechter Stil.
Du kannst außerdem noch das builtin file() nutzen, das macht das gleiche.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Dienstag 15. Februar 2005, 13:45

Könnte es sein, das der Name 'open' an ein anderes Objekt gebunden ist als die normale open() Funktion?
Mordred

Dienstag 15. Februar 2005, 13:48

Leonidas hat geschrieben:Vermutlich hast du durch

Code: Alles auswählen

from irgendeinmodul import *
das builtin open() durch ein anderes open() ersetzt. Von * imports rate ich generell ab, das sieht man oft in Tkinter Programmen und ist eher schlechter Stil.
Du kannst außerdem noch das builtin file() nutzen, das macht das gleiche.
Besten Dank, mit file() hats funktioniert :)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 15. Februar 2005, 13:55

Mordred hat geschrieben:Besten Dank, mit file() hats funktioniert :)
Trotzdem, es ist kein Zustand, dass du open() einfach so überschreibst. Du kannst dein wahres Wunder erleben, wenn noch weitere Dinge überschrieben wurden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Mordred

Dienstag 15. Februar 2005, 13:58

Die einzigen Dinge, die diesbezüglich möglich (aber unwahrscheinlich) wären, sind folgende importiere Module:

Tkinter
time
calendar
os

Code: Alles auswählen

def forget():
    try:
        hw
        hw.place_forget()
    except NameError:
        print ""
...
Halte ich ebenfalls für unwahrscheinlich. Open() wird nirgends als Funktion beschrieben :?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 15. Februar 2005, 14:01

Mordred hat geschrieben:Die einzigen Dinge, die diesbezüglich möglich (aber unwahrscheinlich) wären, sind folgende importiere Module:

Tkinter
time
calendar
os
Und was ist mit os.open() :?:
Davon mal abgesehen: was macht es für einen unterschied ob man Tkinter.root() oder root() aufruft? man kann ja noch sowas machen:

Code: Alles auswählen

import tkinter as t
Dann hat man auch wenig zu tippen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Mordred

Dienstag 15. Februar 2005, 14:06

Okay, Danke für den Hinweis und Tipp :D

Jeder fängt ja mal unten an ;)

Gruß,
Mordred
Antworten