V dnešním díle se podíváme na poslední části jazyka Python, jenž jsou pro začátek zajímavé, jedná se o příkaz import a tzv. výjimky.
18.2.2005 15:00 | Aleš Hakl | přečteno 18255×
Omlouvám se za to, že tento díl vychází s takovým spožděním za předchozím, bohužel i moderní taiwanská technika občas zklame ^_~
Program v jazyce Python může využívat služeb poskytovaných programy v jiných souborech, či kompilovaným kódem napsaným například v jazyce C. Takovémuto úseku kódu v jiném souboru se v terminologii jazyka Python říká modul. Prozatím nám jistě bude stačit vědět, jak v našem programu takový modul použijeme.
K načtení modulu ze souborového systému slouží příkaz import
:
import jméno modulu
Jméno modulu je identifikátor, který označuje modul, jenž se snažíme načíst. Tento název se zapisuje jako běžná proměnná a může obsahovat tečky, které umožňují moduly sdružovat do větších celků, takzvaných balíčků.
Příkaz import
načte modul do paměti a k jeho obsahu můžeme
dále přistupovat tak, že před název proměnné, třídy či funkce
z něj
uvedeme jeho název:
jméno_modulu.jméno_proměnné
. Pokud nám
tento zápis nevyhovuje můžeme použít příkaz:
from jméno_modulu import název
Tento příkaz importuje z daného modulu objekt jménem název tak, že
tento objekt pak bude dostupný pod názvem název. Místo názvu
také můžeme uvést znak *
, to způsobí že se z modulu zpřístupní
všechny názvy, které jsou v daném modulu dostupné, další variantou zápisu je,
že můžeme uvést seznam názvů oddělených čárkou. Identifikátor za
from
nemusí být nutně celé jméno modulu, stačí jméno balíčku,
v tom případě název označuje modul(y) v tomto balíčku, které opět
budou dostupné pod zkráceným názvem.
Příkaz from...import
si zaslouží krátkou zmínku o efektivitě
provádění programu, doporučuje se aby název používaný v programu obsahoval
co nejméně teček (polopaticky řečeno), každá tečka sebou totiž přináší
jisté zpomalení programu. Na druhou stranu rychlost provádění programu
v Pytonu málokdy bývá kritická. Osobně importuji moduly většinou tak,
že v programu používám pouze poslední část jejich názvu.
Tedy:
import time
Importuje modul time
, kterýžto bude dostupný pod názvem
time
.
from time import *
Importuje modul time
tak, že jeho obsah bude z programu
dostupný přímo.
from xml.dom.ext.reader import Sax2
Importuje modul xml.dom.ext.reader.Sax2
pod názvem
Sax2
.
Za zmínku též jistě stojí, že příkaz import
neprovádí to
stejné jako stejně pojmenovaný příkaz s podobným významem známý z jazyka
Java, který se shodou okolností i dost
podobně zapisuje. Věřím tomu, že mnoho programátorů znalých jazyka Java
toto bude dlouho mást.
Úmyslně jsem neuvedl, jak takové moduly či balíčky vlastně vypadají, jedná se totiž o poněkud obsáhlejší téma, které si necháme na některý z pozdějších dílů.
Výjimky jsou způsob jakým se v Pythonu ošetřují chyby. Jedná se o způsob jakým lze rozumně zajistit aby na chybu vždy nějak zareagoval, i v případě, že s ní programátor nepočítá, a zároveň aby programátor měl možnost na takovou situaci reagovat po svém a bez velké námahy pokračovat dále ve vykonávání programu.
Za zmínku také stojí, že v Pythonu jsou na několika místech výjimky použity i jako způsob jak z funkce vrátit hodnotu označující stav jako "Žádná další hodnota neexistuje", přestože funkce jinak může vrátit naprosto cokoli, i když takový stav vlastně vůbec není chybou.
Výjimka je instance třídy, která popisuje nějaký chybový stav, který
brání tomu aby program normálně pokračoval v běhu, v případě, že
je vyvolána výjimka, postupně se vyskakuje z bloků programu, dokud
se nenajde blok try...except
, který tuto výjimku
(nebo některou z jejích rodičovských tříd) ošetřuje. Pokud se takový
blok nenajde, interpret vypíše chybové hlášení a program skončí.
Obecná syntaxe tohoto bloku je:
try: kód except Výjimka0, identifikátor: reakce0 except Výjimka1, identifikátor: reakce1 . . .
Pokud kód tedy vyvolá nějakou výjimku pro kterou existuje
odpovídající except
, pokračuje provádění v odpovídajícím bloku
reakce, s tím, že výjimka, na kterou reagujeme, je přiřazena
do proměnné identifikátor(z výše uvedeného to není patrné, ale v
různých blocích except
může být tento identifikátor
samozřejmě různý)
Tím jsme určitě neprošli jazyk Python kompletně, ale prošli jsme ho natolik, že se můžeme v dalších dílech zabývat tím, jaké zajímavé funkce a třídy nám rozsáhlá standardní knihovna Pythonu nabízí.