Seite 1 von 1

Nach Umwandlung in exe Abbruch des Programms

Verfasst: Mittwoch 20. Februar 2013, 12:45
von muffin
Hi, habe ein Verständnisproblem bei einem Programm.
Über eine GUI (tkinter) Eingabe von mehreren Daten, die ausgelesen werden und in eine html-Datei geschrieben werden sollen.
Im ersten Fall klappt das wunderbar, im 2. Fall bricht das Programm immer ab.
Wer kann mir da helfen? Dankeschön

Code: Alles auswählen

import tkinter.ttk as ttk
import tkinter as tk
import os


main = tk.Tk()
page = ttk.Notebook(main)
page.pack(fill = "both", expand = 1)

daten = tk.Frame()
blubbbb = tk.Frame()

page.add(daten, text = "BLA")
page.add(blubbbb, text = "BLUB")


def readFiles():
    
    daten_file_html = open("daten.html", "a")    

    daten_file_html.write ("<p>Bericht</p>"
                                   "Name {0}, {1}</strong>".format(nachname_entry.get(), vorname_entry.get(), ))
        
    if len(nachname_entry.get()) > 3:
        daten_file_html.write ("BlaBlabBlaBlabBlaBlabBlaBlabBlaBlabBlaBlabBlaBlabBlaBlab.<br/>")
    else:
        daten_file_html.write ("BUUUUUUUUUUUUUUUUUU<br/>")
          
    if len(vorname_entry.get()) > 3:
        ausgabe_betreuer = ("<BlaBlabBlaBlabBlaBlabBlaBlabBlaBlabBlaBlab<br/>")
    else:
        daten_file_html.write ("BAAAAAAAAAAAA<br/>")
    
#wenn ich den jetzt folgenden Teil "aktiv" in meiner EXE aktiv schalte, dann bricht das Programm immer ab, ansonsen läuft die exe
#wenn ich das programm ganz "normal" ausführe , dann klappt alles
    """
    if len(nachname_entry.get()) == 5:
        daten_file_html.write("kjfklsda flk")
    else:
        daten_file_html.write("lsdsdjafl dsöfkjds k")
        
    """   
    daten_file_html.close()
    os.startfile("daten.html", "open")
        
nachname_label = tk.LabelFrame(daten, text = "Nachname")
nachname_label.grid(sticky = "w")
nachname_entry = tk.Entry(nachname_label)
nachname_entry.grid(sticky = "w")
vorname_label = tk.LabelFrame(daten, text = "Vorname")
vorname_label.grid(sticky = "w")
vorname_entry = tk.Entry(daten)
vorname_entry.grid(sticky = "w")


lesenButton = tk.Button(daten, text = "Lesen", command = readFiles)
lesenButton.grid(padx = 5, pady = 5)

if __name__ == '__main__':
    main.mainloop()
Vielen Dank für Eure Hilfe

Re: Nach Umwandlung in exe Abbruch des Programms

Verfasst: Donnerstag 21. Februar 2013, 00:50
von Leonidas
Was ist denn die Fehlermeldung?

Re: Nach Umwandlung in exe Abbruch des Programms

Verfasst: Donnerstag 21. Februar 2013, 08:16
von muffin
:oops: :oops: :oops:
Das ist jetzt echt peinlich, dass ich das überlesen habe. Es liegt an den Umlauten.
Wenn ich die raus nehme, dass klappts

Habs jetzt mit

Code: Alles auswählen

# -*- coding: utf-8 -*-
in der Startzeile versucht, das klappt aber auch nicht
:(

Re: Nach Umwandlung in exe Abbruch des Programms

Verfasst: Donnerstag 21. Februar 2013, 08:53
von Sirius3
@muffin: ist die Datei denn utf-8 kodiert?

Re: Nach Umwandlung in exe Abbruch des Programms

Verfasst: Donnerstag 21. Februar 2013, 09:13
von BlackJack
@muffin: Es fehlen Informationen um Dir sinnvoll helfen zu können. Zum Beispiel wie und womit die EXE überhaupt erstellt wurde und wie die Fehlermeldung genau lautet, bei Ausnahmen, bitte inklusive Traceback.

Re: Nach Umwandlung in exe Abbruch des Programms

Verfasst: Donnerstag 21. Februar 2013, 09:21
von muffin
ähhm - weiß nicht.
Hab in der IDLE Shell mal sys.stdout.encoding eingegeben mit dem ERgebnis: 'cp1252'
Also dann
# -*- 'cp1252' -*-
in der Startzeile
geht aber immer noch nicht

Re: Nach Umwandlung in exe Abbruch des Programms

Verfasst: Donnerstag 21. Februar 2013, 09:46
von /me
muffin hat geschrieben:Also dann
# -*- 'cp1252' -*-
in der Startzeile
geht aber immer noch nicht
Du solltest dort die Codierung angeben in der die Datei gespeichert ist, nicht die Codierung der Kommandozeile.

Re: Nach Umwandlung in exe Abbruch des Programms

Verfasst: Donnerstag 21. Februar 2013, 09:49
von muffin
Also hier ist die Fehlermeldung

Code: Alles auswählen

C:\Python32\build\exe.win32-3.2>testen.exe
Traceback (most recent call last):
  File "C:\Python32\lib\tkinter\__init__.py", line 1399, in __call__
    return self.func(*args)
  File "testen.py", line 42, in readFiles
UnicodeEncodeError: 'ascii' codec can't encode characters in position 12-20: ord
inal not in range(128)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python32\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 2
7, in <module>
    exec(code, m.__dict__)
  File "testen.py", line 62, in <module>
  File "C:\Python32\lib\tkinter\__init__.py", line 1009, in mainloop
    self.tk.mainloop(n)
  File "C:\Python32\lib\tkinter\__init__.py", line 1403, in __call__
    self.widget._report_exception()
  File "C:\Python32\lib\tkinter\__init__.py", line 1167, in _report_exception
    root.report_callback_exception(exc, val, tb)
  File "C:\Python32\lib\tkinter\__init__.py", line 1742, in report_callback_exce
ption
    import traceback, sys
  File "C:\Python\32-bit\3.2\lib\traceback.py", line 3, in <module>
  File "C:\Python\32-bit\3.2\lib\linecache.py", line 10, in <module>
  File "C:\Python\32-bit\3.2\lib\tokenize.py", line 28, in <module>
ImportError: No module named re
Die exe wurde mit cx_Freeze erstellt, ich nutze Pyhton 3.2

Re: Nach Umwandlung in exe Abbruch des Programms

Verfasst: Donnerstag 21. Februar 2013, 10:03
von BlackJack
@muffin: Das Problem hat überhaupt nichts mit dem Umwandeln in eine EXE zu tun. Du versuchst etwas ausserhalb von ASCII in eine Datei zu schreiben wobei die Zeichenkette in Bytes umgewandelt werden muss. Und da darf dann entweder nur ASCII enthalten sein, oder Du musst diese Umwandlung vorher explizit unter Angabe einer Kodierung vornehmen. Das kannst Du entweder jede mal vor dem Schreibaufruf tun, oder Du verwendest das `encoding`-Argumen von `open()`, damit das Dateiobjekt weiss wie es mit Zeichenketten umgehen soll.

Wo wir gerade bei `open()` sind: Die ``with``-Anweisung macht das schliessen einer Datei etwas einfacher/sicherer.

Re: Nach Umwandlung in exe Abbruch des Programms

Verfasst: Donnerstag 21. Februar 2013, 10:33
von muffin
Ah super, danke BlackJack, das klappt jetzt. Die exe Datei wird nicht mehr gekillt.
Allerdings werden die Umlaute in der html-Datei noch kryptisch ausgegeben habe es mit utf8, und mit iso-8859-1 und mit iso-8859-15 versucht...


Edit:
Ich nehm alles zurück. Ich hatte beim Öffnen der Datei als Option "a" angegeben anstatt "w" und damit habe ich natürlich immer noch den "alten Mist" in meiner html-Datei.

Also nochmals vielen Dank für die schnelle Hilfe