Sunday, 17 May 2015

20.Exception Handling

Python memiliki indikator kondisi error dan pengecualian dengan menggunakan exception, tetapi ada beberapa pihak ketiga dari library python yang menggunakan cara lama dengan mengembalikan nilai 'error' saja.

Exception digunakan dengan menggunakan block 'try... except', yang bisanya menggunakan syntax:

  1. try :
  2.      perintah1
  3. except exception1 as variable1 :
  4.      perintah2
  5. except exception2 as variable2 :
  6.      perintah3
  7. else:
  8.      perintah4
  9. finally:
  10.      perintah5

Harus ada setidaknya satu (1) except block, perintah 'else' dan 'finally' adalah pilihan.
Blok 'else' bila pada blok try terjadi normal (tidak ada error).
Blok 'finally' akan selalu dieksekusi.

Bila exception terjadi di blok 'try', semua blok except akan dicoba, bila exception cocok pada salah satu blok except, maka blok tersebut akan dieksekusi. Agar dapat cocok dengan exception, exception harus menggunakan type yang sama dari list exception dari group atau subclass.


Untuk Program yang tidak mengalami masalah, gambaranya adalah:

Untuk Program yang terjebak Handled Exception:

Dan Program yang terjebak error tanpa Handled Exception:
Error standar yang saya maksud disini adalah dari program terhenti sementara sampai program crash, tapi blok finally akan dieksekusi.

Bila ingin lebih jelas soal exception bisa dibaca disini atau https://docs.python.org/3.4/library/exceptions.html

Turunan dari exception yang lebih detail:

BaseException
 1-- SystemExit
 2-- KeyboardInterrupt      (Ketika user menekan keyboard (biasanya Ctlr+C))
 3-- GeneratorExit              (Ketika metode close() dipanggil)
 4-- Exception                    (Semua error yang bukan system)
      1-- StopIteration          (Ketika next() dan iterator_next_() tidak menemukan yang berikutnya)
      2-- ArithmeticError     (Kesalahan pada aritmatik)
           1-- FloatingPointError  (Ketika operasi pada float gagal)
           2-- OverflowError  (Ketika operasi aritmatik terlalu besar)
           3-- ZeroDivisionError
      3-- AssertionError       (Ketika assert gagal)
      4-- AttributeError        (Ketika atribut reference gagal)
      5-- BufferError            (Buffer tidak dapat dijalankan)
      6-- EOFError               (Ketika fungsi input sampai diakhir tidak ada data, end-of-file (EOF))
      7-- ImportError            (Ketika statement import gagal)
      8-- LookupError          (Ketika kunci atau index tidak valid)
           1-- IndexError         (Ketika index diluar jangkauan)
           2-- KeyError           (Ketika mapping key tidak ditemukan)
      9-- MemoryError         (Ketika nama local atau global tidak ditemukan)
      10- NameError
           1-- UnboundLocalError
      11- OSError                 (Ketika system tidak bekerja, misalnya 'file not found')
           1-- BlockingIOError
           2-- ChildProcessError
           3-- ConnectionError
                1-- BrokenPipeError
                2-- ConnectionAbortedError
                3-- ConnectionRefusedError
                4-- ConnectionResetError
           4-- FileExistsError
           5-- FileNotFoundError
           6-- InterruptedError
           7-- IsADirectoryError
           8-- NotADirectoryError
           9-- PermissionError
           10- ProcessLookupError
           11- TimeoutError
      12- ReferenceError    (Ketika reference proxy lemah)
      13- RuntimeError       (error terdeteksi tapi tidak menggangu yang lainnya)
           1-- NotImplementedError     (Ketika runtime Error, memerlukan methode override)
      14- SyntaxError                   (Kesalahan syntax)
           1-- IndentationError
                1-- TabError
      15- SystemError
      16- TypeError
      17- ValueError
           1-- UnicodeError
                1-- UnicodeDecodeError
                2-- UnicodeEncodeError
                3-- UnicodeTranslateError
      18- Warning
           1-- DeprecationWarning
           2-- PendingDeprecationWarning
           3-- RuntimeWarning
           4-- SyntaxWarning
           5-- UserWarning
           6-- FutureWarning
           7-- ImportWarning
           8-- UnicodeWarning
           9-- BytesWarning
           10- ResourceWarning


Exception menyediakan cara untuk mengubah flow control dari program, kita dapat mengambil keuntungan dari itu, dengan menggunakan build-in exception atau kita dapat menbuat yang baru, dengan 'raise'.

Ada tiga syntax yang dapat kita gunakan:

  1. raise exception(args)
  2. raise exception(args) from exception_asli
  3. raise
Yang pertama digunakan dengan salah satu dari build-in exception, bila kita memberikan sebuah kalimat sebagai argument, maka text tersebut menjadi output bila exception terjadi.
Yang kedua adalah variasi dari yang pertama, yaitu exception berantai yang termasuk exception yang aslinya
Dan yang ketiga adalah exception yang tidak specifik, 'raise' akan memunculkan exception saat aktif, dan ketika tidak ada maka akan muncul typeError.



No comments:

Post a Comment