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ę!