Programowanie w Sieci Internet Python: Operacje z plikami oraz

Transkrypt

Programowanie w Sieci Internet Python: Operacje z plikami oraz
Programowanie w Sieci Internet
Python: Operacje z plikami oraz
obsługa wyjątków
Kraków, 5 grudnia 2014 r.
mgr Piotr Rytko
Wydział Matematyki i Informatyki
Otwieranie plików
Otwieranie plików jest realizowane przez metodę
● open(file_name [, access_mode][, buffering])
● access_mode – tryb otwierania pliku. (r – odczyt, rb – odczyt
binarny, r+ - odczyt i zapis, rb+ - odczyt i zapis binarny, w – zapis,
wb – zapis binarny, w+ – zapis i odczyt, wb+ – zapis i odczyt
binarnie, a – dołącznie do pliku, ab – dołączanie do pliku
binarnie, a+ – dołącznie i odczyt z pliku, ab+ – dołączanie i
odczyt binarny z pliku.
● buffering – rodzaj buforowania (0 – brak bufforowania, 1 –
buforowanie linii, > 1 – określa rozmiar bufora, < 0 – używa
domyślnego buforowania systemowego.
Atrybuty pliku:
file.closed – czy plik jest zamknięty, file.mode – zwraca tryb pracy z
plikiem, file.name – nazwa pliku.
Praca z dokumentem
●
●
●
●
●
close() – dokonuje zrzutu nie zapisanych danych z bufora i
zamyka plik. Po tej akcji nie można już więcej pisać do tego
pliku. Python jednal sam zamyka pliki gdy juz nie istnieje zadne
odwolanie do pliku.
write() – dodaje “text” do pliku (ten “text” może być także
traktowany jako dane binarne),
read() – czyta “text” z pliku (tu również “text” może być danymi
binarnymi). read() może pobierać parametr mówiący o liczbie
bajtów, które ma odczytać. Bez podania liczby bajtów do
odczytu, python prubuje odczytać tyle ile da rade, w
szczególności do końca pliku,
tell() – zwraca pozycję kursora względem początku pliku,
speak(offset [,from]) – ustawia kursor (from 0 – początek pliku,
1 – obecna pozycja, 2 – koniec pliku)
Zmiana nazwy / usówanie pliku
●
●
os.rename(current_name, new_name) – zmienia nazwę pliku
na nową,
os.remove(file_name) – usówa plik.
Katalogi
●
os.mkdir(dir_name) – tworzy katalog,
●
os.chdir(dir_name) – zmienia katalog na dir_name,
●
os.getcwd() – zwraca lokalizacje obecnego katalogu,
●
os.rmdir(dir_name) – usówa katalog dir_name.
Exceptions
Obsluga wyjątków w pythonie różni się nieco od innych językow
wysokiego poziomu.
Zwyczajowo istnieje blok try, w ktorym wykonywany jest kod,
ktory moż epowodować wystąpienie wyjątków. Po bloku try
umieszczamy bloki except, w których to obsługujemy
poszczególne wyjątki. A na koniec (i tu znacząca różnica) blok
else, ktory zawiera operacje ktore wykonujemy gdy nie
napotkano żadnego wyjątku.
Jeśli po słowie kluczowym except nie uimieścimy klasy wyjątku,
to w blok ten wpadnie każdy wyjątek, który poleciał z kodu w
bloku try.
Oczywiście możemy wyłapać do naszego bloku konkretne
wyjatki poprzez except(Exception1[,
Exception2[,...ExceptionN]]):
Exceptions c.d.
Mamy także blok finally, w ktory wpadamy zawsze niezależnie
od tego czy został rzycony jakikolwiek wyjątek.
Blok finally nie może zostać użyty razem z blokiem else.
Do bloku except można także dorzucić argument, jest to
argument wyjatku i dzięki temu mozna wyświetlić jego wartość:
except Exception, Argument:
Jeśli mamy kilka exceptionów łapanych do bloku, to argument
bedize należał do najważniejszego złapanego wyjatku.
Dodatkowo argument może być nie jedno, a wielo wartościowy i
zwracac takie dane jak error message string, error number i
error location.
Rzucanie wyjątkami
Aby rzucić wyjatkiem wystarczy wywołać raise [Exception [, arg
[, traceback]]]
Exception jest typu exception, arg jest jego wartoscią i jest
opcjonalny. Można także dołączyć trackback obiekt.
Exception to może być dowolny, objekt li klasa (w szczególności
może to być string)
Aby móc złapać ten wyjątek należy łapać ten objekt, klase lub
dokładnie ten sam string.
Przyklad na następnej stronie
Przyklad utwożenia wlasnego Exceptiona
Utworzenie własnego Exceptiona bazujac na RuntimeError
class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg
Rzucenie i złapanie naszego wyjątku z wyswietleniem info
try:
raise Networkerror("Bad hostname")
except Networkerror,e:
print e.args
Dziękuję za uwagę!