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.
ich habe folgendes Problem: ich möchte einige meiner Turtlebefehle in ein Modul verschieben. Seltsamerweise funktioniert der Aufruf von Funktionen dann nur jedes 2. Mal - sonst bekomme ist eine turtle.Terminator Exception. Kann mir jemand sagen, was ich falsch mache
BlackJack hat geschrieben:Kann ich nicht nachvollziehen, aber sag mal wie kommt denn das bitte *dort* hin: ``/usr/lib/python3.5/myfigures.py``? Das hat da nichts zu suchen.
@jlackner: Auf jeden Fall nicht *dort*. Da ist die Standardbibliothek, und wirklich nur die. Und kopier das auch nicht einfach irgendwo selbst hin, sondern installiere es ordentlich.
BlackJack hat geschrieben:@jlackner: Auf jeden Fall nicht *dort*. Da ist die Standardbibliothek, und wirklich nur die. Und kopier das auch nicht einfach irgendwo selbst hin, sondern installiere es ordentlich.
Wie auch immer - das hat mit dem Thema nichts zu tun. Zusammenfassend also: keine Idee woran es liegen könnte?
@jlackner: »exitonclick« tut wirklich das, was es sagt; es verläßt die Turtle-Umgebung, so dass man danach nichts mehr Zeichnen kann/darf/soll. Was möchtest Du eigentlich damit erreichen?
Sirius3 hat geschrieben:@jlackner: »exitonclick« tut wirklich das, was es sagt; es verläßt die Turtle-Umgebung, so dass man danach nichts mehr Zeichnen kann/darf/soll. Was möchtest Du eigentlich damit erreichen?
Ja, sorry - ich hab nur herumgespielt. Ich hab das exitonclick in meiner Version wieder draußen.
Es wirkt für mich so, als würde irgendetwas vom Zeichenprozess hängen und beim nächsten Aufruf die Exception auslösen. Wenn ich die fange und die gleiche Funktion nochmal aufrufe, funktioniert es zwar, ist aber unsauber.
und das in Python 2.7.12 und Python 3.5.2 - ich vermute also, dass das nichts mit meinem Python zu tun hat, eher mit dem OS (Linux) oder mit der Art wie ich die Turtle instantiiere und dann dem Garbagecollector überlasse
@jlackner: Ich kann das hier unter Linux nicht nachvollziehen. Zeig doch mal ein komplettes Beispiel, mit Beschreibung was man eingeben muss um zum Traceback zu kommen und dann auch den kompletten Traceback der zum Beispiel passt.
jochen@sauron:~$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import myfigures
>>> myfigures.rechteck(100,80)
>>> myfigures.rechteck(100,80)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/myfigures.py", line 5, in rechteck
fd(laenge)
File "<string>", line 5, in fd
turtle.Terminator
Ich hatte auch versucht mit alex = turtle.Turtle() eine lokale Instanz einer Turtle in meinem Modul zu verwenden (davon ist die import-Zeile gewesen) - aber das hat nicht wirklich etwas geändert.
Ich kann es leider nicht nachvollziehen, egal ob ich Python 2 oder 3 nehme, und egal ob ich Python in einem Terminal starte oder die Python-Shell in IDLE verwende, ich kann die Funktion beliebig oft aufrufen. Und ich sehe auch nicht warum das nicht möglich sein sollte.
jlackner hat geschrieben:welche Pythonversion hast Du denn? (bei mir 3.5.2 unter Kubuntu 16.04.2)
Kann es sein, dass 'myfigures' nicht 'turtle' aus der Standardbibliothek, sondern irgendein anderes Modul, das genau so heißt importiert?
Hast du irgendwo im Suchpfad eine Datei abgelegt, die du 'turtle' benannt hast?
jlackner hat geschrieben:welche Pythonversion hast Du denn? (bei mir 3.5.2 unter Kubuntu 16.04.2)
Kann es sein, dass 'myfigures' nicht 'turtle' aus der Standardbibliothek, sondern irgendein anderes Modul, das genau so heißt importiert?
Hast du irgendwo im Suchpfad eine Datei abgelegt, die du 'turtle' benannt hast?
Nein, ich hab sonst an der Standardinstallation nichts verändert
ich hab so irgendwie den Verdacht, dass ich eine Instanz der turtle anlege durch meine Zeichnerei, die dann nicht sauber beendet wird. Beim ersten Aufruf von "rechteck" mache ich das turtle-Fenster mit Alt-F4 zu... kann das damit etwas zu tun haben?
@jlackner: Das gehört dann zu dem Teil der Beschreibung wie man zu der Ausnahme gelangt. Wenn ich Alt+4 nach dem zeichnen des ersten Rechtecks drücke, kann ich die Funktion problemlos ein zweites mal aufrufen. (Und auch weitere male.) Wenn ich das Fenster schliesse *während* das Rechteck gezeichnet wird, dann bekomme ich einen `TclError`, weil ich dem laufenden Programm die GUI unterm Allerwertesten weg ziehe. Aber danach kann ich die Funktion problemlos wieder aufrufen. Das ganze im Terminal und nur mit Python 2.7, weil ich keine Lust habe jetzt alle möglichen Kombinationen von Python und IDEs durch zu probieren.
BlackJack hat geschrieben:@jlackner: Das gehört dann zu dem Teil der Beschreibung wie man zu der Ausnahme gelangt. Wenn ich Alt+4 nach dem zeichnen des ersten Rechtecks drücke, kann ich die Funktion problemlos ein zweites mal aufrufen. (Und auch weitere male.) Wenn ich das Fenster schliesse *während* das Rechteck gezeichnet wird, dann bekomme ich einen `TclError`, weil ich dem laufenden Programm die GUI unterm Allerwertesten weg ziehe. Aber danach kann ich die Funktion problemlos wieder aufrufen. Das ganze im Terminal und nur mit Python 2.7, weil ich keine Lust habe jetzt alle möglichen Kombinationen von Python und IDEs durch zu probieren.
Neinnein, so ist es nicht - ich lasse ihn das Rechteck fertig zeichnen. Schließe das Fenster dann und möchte ein neues Rechteck zeichnen lassen - dann schmiert er ab.