Python (9.) - Další aspekty jazyka Python

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 18252×

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 ^_~

Příkaz import

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

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í.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=710