Eksepsi terjadi ketika ada sesuatu yang terduga muncul dalam program. Misalnya program anda akan membaca suatu file, namun file tersebut tidak ada. Hal seperti ini ditangani dengan exception
Syntax error, atau dikenal juga sebagai parsing error, adalah error ketika Python memparsing program anda.
>>> Print 'halo'
File "<stdin>", line 1
Print 'halo'
^
SyntaxError: invalid syntax
>>> while True print 'Hello world'
File "<stdin>", line 1
while True print 'Hello world'
^
SyntaxError: invalid syntax
Kita akan mencoba / try membaca input dari pengguna. Tekan Ctrl-d apa yang akan terjadi.
>>> teks = raw_input('Ketikkan sesuatu: ')
Ketikkan sesuatu: Traceback (most recent call last):
File "<stdin>", line 1, in <module>
EOFError
Python mengeluarkan eksepsi EOFError yang berarti menemukan simbol end of file (direpresentasikan oleh Ctrl-d) ketika program berharap tidak akan ada.
Kita dapat menangani eksepsi menggunakan statemen try ... except. Sederhananya kita letakkan statemen yang mungkin mengeluarkan eksepsi kedalam try-block, dan letakan kode penanganan eksepsi kedapam except-block.
# lat39.py
try:
teks = raw_input('Ketikkan sesuatu: ')
except EOFError:
print '\nKenapa sudah EOF?'
except KeyboardInterrupt:
print '\nAnda membatalkan operasi'
else:
print 'Anda mengetikkan "%s"' % teks
Anda dapat mengeluarkan eksepsi menggunakan statemen raise dengan menyediakan obyek eksepsi.
Anda dapat membuat eksepsi sendiri dengan membuat class turunan Exception.
# lat40.py
class InputPendekError(Exception):
"exception jika input terlalu pendek"
def __init__(self, panjang, minimal):
Exception.__init__(self)
self.panjang = panjang
self.minimal = minimal
try:
teks = raw_input('Ketikkan sesuatu: ')
panjang = len(teks)
minimal_panjang = 3
if panjang < minimal_panjang:
raise InputPendekError(panjang, minimal_panjang)
except EOFError:
print '\nKenapa sudah EOF?'
except KeyboardInterrupt:
print '\nAnda membatalkan operasi'
except InputPendekError as e:
print 'input terlalu pendek: panjang input: %s, minimal: %s' % (e.panjang, e.minimal)
else:
print 'Anda mengetikkan "%s"' % teks
Ketika anda membaca file dari program anda. Bagaimana anda memastikan file akan ditutup baik ada eksepsi maupun tidak. Anda bisa menggunakan blok finally pada blok try.
# lat41.py
import time
try:
f = open('coba.txt')
while True:
baris = f.readline()
if len(baris) == 0:
# EOF
break
print baris,
time.sleep(2) # delay 2 detik
except KeyboardInterrupt:
print '\nAnda membatalkan operasi'
finally:
f.close()
print '\nfile ditutup.'
Mendapatkan resource pada blok try dan melepasnya pada blok finally merupakan pola yang umum ditemukan. Oleh karena itu, anda dapat menggunakan menggunakan statemen with yang menyediakan mekanisme diatas secara otomatis.
# lat42.py
with open('coba.txt') as f:
for baris in f:
print baris,