Odbočka: zachytávání chyb pomocí try..except

Co je v bloku za Try, to se kontroluje na chybu. Pokud zde dojde k chybě, spustí se blok za except. Jinak jej program přeskočí.

Nezbytné pro psaní robustních programů. Příklad viz níže.

Vhodné použít modul traceback.

Vzorový program s GTK

V následujícím programu máme popořadě: hlavičku souboru, definici kódování souboru, docstring, import modulů, definici hlavní třídy programu, inicializaci této třídy a nakonec funkci gtk.main(), která čeká na uživatelskou odezvu.

#!/usr/bin/env python
#-*- coding: utf-8 -*-
"""
This program demonstrates a simple Graphical User Interface.

Filip Dominec, dominecf@fzu.cz
"""

import gtk, traceback

class Main: 
    def __init__(self):
        self.window1 = gtk.Window()

        self.hbox1 = gtk.HBox()
        self.window1.add(self.hbox1)

        self.btnText = gtk.Button("OK")
        self.hbox1.pack_start(self.btnText)

        self.ent1 = gtk.Entry()
        self.hbox1.pack_start(self.ent1)

        self.btnKonec = gtk.Button("Konec")
        self.hbox1.pack_start(self.btnKonec)

        self.window1.show_all()


        ## Přidání obsluhy událostí
        self.btnText.connect("clicked", self.on_btnText_clicked)
        self.btnKonec.connect("clicked", self.destroy)

    def destroy(self, widget, data=None):
        gtk.main_quit()

    # GUI event handlers
    def on_btnText_clicked(self, sender):
        print "Clicked"
        self.ent1.set_text(u"Vložený text")
        pass

if __name__ == '__main__':        # avoid execution if loaded as a module only
    try:
        MainInstance = Main()
        gtk.main()
    except:
        traceback.print_exc()
        blah = input()    # enables to read the error report on volatile terminal

Python a čeština na Windows

Předchozí kód by měl zajistit, že při jakékoli chybě v programu se skočí na funkci traceback.print_exc(), která vypíše původce chyby a pak zůstane okno otevřené, abychom to přečetli.

Může výjimečně nastat tak zásadní chyba, že se program ukončí dřív, než se vypíše traceback.print_exc(). Jednou z takových chyb je výskyt písmenek s háčky a čárkami v pythonu 2.6 na Windows.

Jako řešení by měly pomoci tyto 3 kroky:

		1. pod hlavičkou souboru je řádek obsahující buďto #coding=utf8   nebo #coding=cp1250, podle toho, co používá váš editor
		2. => soubor ukládáme s uvedeným kódováním (utf8 nebo cp1250), obvykle lze nastavit v textovém editoru
		3. řetězce, které obsahují česká písmenka, uvozujeme písmenem u, jako třeba u"žába" (toto platí v pythonu2.6 ; v pythonu3 to není třeba)	
Pak by neměly nastávat obtíže s diakritikou.
Zpět na obsah | Poslední úprava: 2011-11-27