: "
print "\n"
print sebuah_list
list_baru = sebuah_list + ['PC Linux OS', 'Blankon', 'IGOS', 'OpenSUSE']
print list_baru
print "\n"
print sebuah_tuple
tuple_baru = sebuah_tuple + (100, 200, 300)
print tuple_baru
print "\n"
print sebuah_dictionary
dictionary_baru = {'telp':'022-12345678', 'alamat':'Bandung, Jabar'}
sebuah_dictionary.update(dictionary_baru)
print sebuah_dictionary
print "\n\n"
Kode diatas jika dieksekusi akan muncul tampilan seperti berikut ini :
45
<< ___________ 6.4 hasil eksekusi strukdat_4.py >>
Menghapus Isi List, Tuple, dan Dictionary
Tidak lengkap rasanya bila dalam sebuah informasi ada yang tidak dapat dihapus. Terkadang ada
sebuah data yang tidak Anda butuhkan dan ingin Anda hilangkan dari kumpulan data yang dimiliki.
Misal dalam sebuah list Anda ingin menghapus salah satu elemen. Atau di dictionary, Anda ingin
menghilangkan salah satu key dari dictionary.ini . Di python sendiri penghapusan salah satu
elemen dapat dilakukan di list dan dictionary. sedang tuple tidak mendukung penghapusan
elemen. Jika kita lakukan penghapusan pada salah satu elemen di tuple, maka akan muncul pesan
error : “TypeError: 'tuple' object doesn't support item deletion”. Pada list Anda tinggal menunjuk
salah satu elemennya dengan sebuah angka dari 0 sampai panjang list ini dikurangi satu
dengan diapit tanda “[“ dan “]”. sedang pada dictionary Anda tunjuk salah satu key yang akan
dihapus dari dictionary. Berikut yaitu contoh penghapusan salah satu elemen pada list dan
dictionary.
listing : strukdat_5.py
# cara mendefinisikan list
sebuah_list = ['Zorin OS',
46
'Ubuntu',
'FreeBSD',
'NetBSD',
'OpenBSD',
'Backtrack',
'Fedora',
'Slackware']
# cara mendefinisikan tuple
sebuah_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
# cara mendefinisikan dictionary
sebuah_dictionary = {'nama':'Wiro Sableng',
'prodi':'ilmu komputer',
'email':'wirosableng@localhost',
'website':'http://www.sitampanggarang.com'
}
# cara delete sebuah elemen :
print "cara delete sebuah elemen : "
print "\n"
print sebuah_list
del sebuah_list[0]
print sebuah_list
print "\n"
print sebuah_tuple
# tuple tidak mendukung proses penghapusan elemen :D.(coba hilangkan tanda '#' disampingnya)
#del sebuah_tuple[8]
print sebuah_tuple
print "\n"
print sebuah_dictionary
del sebuah_dictionary['website']
print sebuah_dictionary
print "\n\n"
Kode diatas jika dieksekusi akan muncul tampilan seperti berikut :
47
<< ___________ 6.5 hasil eksekusi strukdat_5.py >>
Menghapus List, Tuple, dan Dictionary
Pada contoh sebelumnya Anda hanya menghapus salah satu elemen. Lalu bagaimanakah jika ingin
menghapus keseluruhan struktur data sehingga struktur data ini terhapus dari memory
seluruhnya ?. Di Python dengan memakai perintah del pada sebuah struktur data maka struktur
data ini akan dihapus sepenuhnya dari memory. Hal ini berlaku juga bagi variabel dan objek
yang didefinisikan oleh programmer. Dengan hilangnya dari memory maka struktur data yang telah
dihapus tidak dapat digunakan lagi oleh program yang Anda bangun.
list : strukdat_6.py
# cara mendefinisikan list
sebuah_list = ['Zorin OS',
'Ubuntu',
'FreeBSD',
'NetBSD',
'OpenBSD',
'Backtrack',
'Fedora',
'Slackware']
# cara mendefinisikan tuple
48
sebuah_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
# cara mendefinisikan dictionary
sebuah_dictionary = {'nama':'Wiro Sableng',
'prodi':'ilmu komputer',
'email':'wirosableng@localhost',
'website':'http://www.sitampanggarang.com'
}
# cara update sebuah elemen :
print "cara delete sebuah elemen : "
print "\n"
print sebuah_list
del sebuah_list
#print sebuah_list
print "\n"
print sebuah_tuple
del sebuah_tuple
#print sebuah_tuple
print "\n"
print sebuah_dictionary
del sebuah_dictionary
#print sebuah_dictionary
print "\n\n"
Cobalah hapus tanda “#” pada baris perintah print di bawah perintah del. Cobalah satu persatu dan
amatilah apa yang terjadi. Jika kita coba pada print sebuah_list yang berada dibawah del
sebuah_list. Maka akan muncul pesan error : “NameError : name 'sebuah_list' is not defined”
<< ___________ 6.6 hasil eksekusi strukdat_6.py >>
49
memakai Built-in Function pada List, Tuple, dan Dictionary
Apakah fitur – fitur manipulasi list, tuple, dan dictionary hanya terbatas pada hapus, tambah dan
ubah ?. Python menyediakan beberapa fitur dasar lainnya yang dapat digunakan untuk proses
mencari nilai maksimum dan minimum, menghitung panjang, membandingkan dua buah struktur
data yang sejenis, bahkan mengubah struktur data dari list ke tuple atau sebaliknya.
Untuk mencari nilai maksimum pada list, tuple, atau dictionary digunakan function max(),
sedang untuk mencari nilai minimum digunakan function min(). Untuk perbandingan dua buah
struktur data sejenis, misal list dengan list, digunakanlah function cmp(). Function cmp() ini akan
menghasilkan tiga nilai yaitu -1 jika list pertama kurang dari list kedua, 0 jika kedua list sama, dan 1
jika list pertama lebih besar dari list kedua. lalu untuk mencari jumlah elemen yang berada
pada struktur data ini digunakan function len(). Dan terdapat juga untuk konversi tipe struktur
data. Tapi fitur ini hanya dapat digunakan pada list dan tuple. Dictionary tidak mendukung proses
konversi. Jadi hanya pengubahan dari list ke tuple dan sebaliknya. Untuk pengubahan dari list ke
tuple digunakan function tuple() sedang untuk pengubahan dari tuple ke list digunakan function
list().
Agar lebih paham cobalah sedikit source code tentang penggunaan built-in function yang digunakan
untuk manipulasi list, tuple, dan dictionary.
listing : strukdat_7.py
# cara mendefinisikan list
sebuah_list = ['Zorin OS',
'Ubuntu',
'FreeBSD',
'NetBSD',
'OpenBSD',
'Backtrack',
'Fedora',
'Slackware']
# cara mendefinisikan tuple
sebuah_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
# cara mendefinisikan dictionary
sebuah_dictionary = {'nama':'Wiro Sableng',
'prodi':'ilmu komputer',
'email':'wirosableng@localhost',
'website':'http://www.sitampanggarang.com'
}
50
# menambahkan elemen baru
print "menambahkan elemen baru : \n"
print sebuah_list
list_baru = sebuah_list + ['PC Linux OS', 'Blankon', 'IGOS', 'OpenSUSE']
print list_baru
print "\n"
print sebuah_tuple
tuple_baru = sebuah_tuple
print tuple_baru
print "\n"
print sebuah_dictionary
dictionary_baru = {'telp':'022-12345678', 'alamat':'Bandung, Jabar'}
print sebuah_dictionary
print "\n\n"
# membandingkan yang lama dengan yang baru
print "membandingkan yang lama dengan yang baru : \n"
print "sebuah_list banding list_baru : ", cmp(sebuah_list, list_baru)
print "sebuah_tuple banding tuple_baru : ", cmp(sebuah_tuple, tuple_baru)
print "sebuah_dictionary banding dictionary_baru : ", cmp(sebuah_dictionary, dictionary_baru)
print "\n\n"
# mengetahui panjang list, tuple, dan dictionary
print "mengetahui panjang list, tuple, dan dictionary : \n"
print "panjang sebuah_list : ", len(sebuah_list)
print "panjang sebuah_tuple : ", len(sebuah_tuple)
print "panjang sebuah_dictionary : ", len(sebuah_dictionary)
print "\n\n"
# mengubah list, tuple, dictionary menjadi string
print "mengubah list, tuple, dictionary menjadi string : \n"
print str(sebuah_list), ' memiliki panjang karakter : ', len(str(sebuah_list))
print str(sebuah_tuple), ' memiliki panjang karakter : ', len(str(sebuah_tuple))
print str(sebuah_dictionary), ' memiliki panjang karakter : ', len(str(sebuah_dictionary))
# mencari nilai max dan min
print "mencari nilai max dan min : \n"
print "coba periksa sebuah_list :"
print "max : ", max(sebuah_list)
print "min : ", min(sebuah_list)
print "\n"
print "coba periksa sebuah_tuple :"
print "max : ", max(sebuah_tuple)
print "min : ", min(sebuah_tuple)
print "\n"
print "coba periksa sebuah_dictionary :"
51
print "max : ", max(sebuah_dictionary)
print "min : ", min(sebuah_dictionary)
print "\n"
# mengubah list ke tuple dan sebaliknya
print "mengubah list ke tuple : "
print "semula : ", sebuah_list
print "menjadi : ", tuple(sebuah_list)
print "\n"
print "mengubah tuple ke list : "
print "semula : ", sebuah_tuple
print "menjadi : ", list(sebuah_tuple)
Dengan adanya built-in function ini pekerjaan Anda sudah dimudahkan oleh Python dalam
memanipulasi struktur data yang telah Anda definisikan sebelumnya. Berikut yaitu salah satu
contoh hasil operasi dengan built function dari kode diatas.
<< ___________ 6.7 hasil eksekusi strukdat_7.py >>
52
7. Membuat Function
Pengenalan Function Tanpa “return”
Pada saat membuat program terkadang kita menyalin blok kode yang sama di baris berikutnya,
misal untuk mencetak sebuah biodata kita salin kembali lalu ganti nilai – nilainya untuk
menampilkan biodata ini . Apakah harus menyalin blok kode di setiap bagian kode yang
membutuhkan kode ini ???. Waktu dulu kuliah Algoritma dan Pemrograman I, saat
mempelajari pemrograman pertama kalinya, baris kode yang sama dipakai berulang – ulang untuk
mengeluarkan hasil tertentu. Tapi jadi tidak efisien, sebab ukuran file program yang ditulis cukup
besar. Oleh sebab itu hampir di setiap bahasa pemrograman terdapat fitur yang dinamakan
function. Nama lainnya method, sub routine, atau fungsi. Function ini berguna untuk penggunaan
kembali blok kode yang akan digunakan di baris kode lain. Sekali tulis tinggal panggil.
Function ini jelas beda dengan built-in function yang ada di Python. Built-in function sendiri yaitu
function yang telah dibuatkan oleh pengembang bahasa pemrograman Python. sedang function
dibuat oleh programmer yang memakai bahasa pemrograman Python, atau istilah lainnya user-
defined function.
Di Python untuk membuat function digunakan keyword def. lalu diikuti nama function yang
diinginkan lalu parameter yang dibutuhkan dengan diawali tanda “(“ dan “)”.Untuk membuka
function dimulai dengan tanda “:”. Tidak seperti di C, Java, atau PHP yang diawali dengan tanda
“{“ dan diakhiri “}” untuk membuka sebuah function. Lalu tutupnya ? Seperti dijelaskan diawal di
Python sendiri digunakan indentasi untuk menentukan apakah baris kode ini milik sebuah
function, if, atau pengulangan. Jadi jika Anda ingin menuliskan kode untuk function yang Anda
buat. Harus ada jarak satu indentasi agar kode ini dianggap sebagai kode dari function yang
Anda tulis. lalu Anda dapat menambahkan keyword return jika function yang Anda tulis
ingin mengembalikan nilai keluaran.
Berikut ada contoh tentang pembuatan function yang memiliki parameter dan tidak memiliki
parameter. Penggunaan return digunakan pada contoh berikutnya :
listing : fungsi_1.py
def fungsi_tanpa_parameter():
for i in range(1, 5):
print "looping ke - ", i
def fungsi_berparameter(batas_akhir):
for i in range(1, batas_akhir):
print "looping ke - ", i
53
print " contoh penggunaan fungsi tanpa parameter : "
print "hasil : ", fungsi_tanpa_parameter()
print "\n\n"
print " contoh penggunaan fungsi berparameter : "
print "hasil : ", fungsi_berparameter(10)
Sebuah function jika dipanggil langsung nilai keluarannya tidak akan dicetak. Tetapi jika dipanggil
melalui sebuah function seperti print nilai keluarannya akan ditampilkan. Kenapa nilainya
“None” ? sebab di function yang tadi ditulis tidak disertakan keyword return. Jika sebuah function
tidak diberikan return maka dapat dibilang function ini dianggap procedure. Sebuah function
yang tidak memiliki nilai keluaran.
<< ___________ 7.1 hasil eksekusi fungsi_1.py >>
Function yang memakai “return”
Bagaimana kalau ditambahkan return ? Jika ditambahkan return, function yang Anda tulis akan
menghasilkan nilai keluaran. Jika dipanggil langsung maka program tidak akan menampilkan nilai
keluaran dari function ini . Jika function ini dipanggil melalui function atau keyword
misalnya print, maka nilai keluarannya akan ditampilkan. Berikut terdapat function yang
menghasilkan nilai keluaran yang memiliki parameter dan tidak berparameter :
54
listing : fungsi_2.py
def fungsi_tanpa_parameter():
temp = 0
for i in range(1, 5):
temp = temp + i
return temp
def fungsi_berparameter(batas_akhir):
temp = 0
for i in range(1, batas_akhir):
temp = temp + i
return temp
print " contoh penggunaan fungsi tanpa parameter : "
print "hasil : ", fungsi_tanpa_parameter()
print "hasil : ", fungsi_tanpa_parameter()
print "hasil : ", fungsi_tanpa_parameter()
print "\n\n"
print " contoh penggunaan fungsi berparameter : "
print "hasil : ", fungsi_berparameter(15)
print "hasil : ", fungsi_berparameter(20)
print "hasil : ", fungsi_berparameter(25)
Anda sendiri dapat melihat perbedannya antara function yang berparameter dengan tidak
berparameter. Pada function yang tidak berparameter. saat dipanggil berulang – ulang nilai
keluarannya tetap sama. Berbeda dengan function yang memiliki parameter, nilai keluaranya
berbeda – beda saat dipanggil. Tergantung nilai masukan yang diberikan.
<< ___________ 7.2 hasil eksekusi fungsi_2.py >>
55
Default Argument pada Python
Sekarang Anda sudah mengenal function yang berparameter dan tidak berparameter. Umumnya saat
akan memberikan nilai pada sebuah function, nilai ini akan diberikan saat function ini
dipanggil. Apakah saat memasukkan nilai boleh tidak diisi atau dilewat ? Lalu apakah akan ada
nilainya ?. Di Python terdapat sebuah fitur yang dinamakan default argument saat menulis sebuah
function. Default argument sendiri yaitu sebuah argumen yang sudah diisi nilai terlebih dahulu
jika argumen ini tidak diberikan saat memanggil function. Jadi sekalipun dilewat nilai dari
argument ini akan dipenuhi dengan nilai default nya. Berikut dibawah ini terdapat contoh
pemanggilan function yang melewatkan semua argumen yang dibutuhkan function, dan yang tidak
melewatkan semua argumen yang akan ditangani oleh default argument :
listing : fungsi_3.py
def cetak_biodata( nama, kota, umur=18):
print "Nama : ", nama;
print "Umur : ", umur;
print "Kota : ", kota;
return;
# kalau parameter diisi semua
print "Tanpa memakai default argument : "
cetak_biodata( nama="miki", umur=50, kota="bandung" )
print "\n"
# kalau parameter tidak diisi semua
print "Memakai default argument : "
cetak_biodata(kota="bandung", nama="miki")
Kode diatas jika dieksekusi akan tampil seperti berikut :
56
<< ___________ 7.3 hasil eksekusi fungsi_3.py >>
Variable-length Argument pada Python
Sekarang kita akan mengenal fitur yang dinamakan dengan variable-length argument. Fitur ini
digunakan saat ingin membuat sebuah function yang memiliki argumen yang dinamis. Argumen
ini dapat disebut sebagai argumen yang tidak utama. Misal dalam sebuah fungsi dibutuhkan tiga
argumen, maka argumen ke – 4 sampai ke – n argumen, tidak akan ditampung oleh argumen utama.
Tapi ditampung oleh argumen terakhir yang menampung seluruh argumen yang diberikan sesudah
argumen utama. Di Python untuk menandakan bahwa argumen ini variable-length argument,
diberikan tanda “*” pada argumen terakhir. Variable-length argument ini harus disimpan di akhir
sesudah argumen biasa dan default argument. Apabila disimpan di urutan awal, maka Python akan
mengeluarkan error : “SyntaxError: invalid syntax”. Sebagai contoh Anda dapat perhatikan kode
berikut ini :
listing : fungsi_4.py
def cetak_perolehan_nilai( nama, twitter, *scores):
print "Nama : ", nama;
print "Twitter : ", twitter;
print "Score yang diperoleh : "
i = 1
for score in scores:
print "nilai ke - %d : %d" % (i, score)
i= i + 1
return;
# kalau parameter diisi semua
print "Dengan adanya variable-length variabel sisa akan menjadi tuple : "
cetak_perolehan_nilai("Silvy", "@sivlysiv", 90, 80, 70, 80, 90)
57
Seperti yang Anda lihat pada contoh diatas, argumen utama yaitu nama dan twitter. Apabila kita
memasukkan argumen sesudah nya, maka argumen ini akan dikumpulkan dalam satu wadah
yaitu *scores. Berapapun kita masukkan argumen, akan ditampung menjadi sebuah list yang berisi
argumen – argumen yang dimasukkan sesudah nama dan twitter.
<< ___________ 7.4 hasil eksekusi fungsi_4.py >>
Keyword Argument pada Function
Dalam penggunaan function Anda mesti melewatkan argumen sesuai urutan yang ditulis pada
parameter yang dibutuhkan oleh function yang Anda tulis. Apakah mungkin jika ditulis tanpa urutan
argumen sudah baku pada function ini . Dalam function terdapat sebuah fitur yang dinamakan
keyword argument. Keyword argument ini dapat melewatkan argumen tanpa harus sesuai urutan.
Keyword argument diberikan saat memanggil sebuah function dengan mengambil nama argumen
yang terdapat di function disambung dengan tanda “=” dan nilai dari argumen ini . Jika kita
memberikan argumen yang tidak sesuai urutan tanpa memakai keyword argument, maka
argumen yang diterima function ini tidak akan sesuai.
listing : fungsi_5.py
def cetak_biodata( nama, umur, kota):
print "Nama : ", nama;
print "Umur : ", umur;
print "Kota : ", kota;
return;
# kalau pakai keyword argument : mau urutannya gimanapun input akan sesuai
print "Tanpa memakai keyword argument : "
58
cetak_biodata( kota="bandung", nama="miki", umur=50 )
print "\n"
# kalau tidak memakai keyword argument : mau urutannya gimanapun input tidak akan sesuai
print "Memakai keyword argument : "
cetak_biodata( "bandung", "miki", 50)
print "\n"
# kalau tidak memakai keyword argument : tapi urutannya sesuai maka input akan sesuai
print "Memakai keyword argument : tapi urutannya sesuai "
cetak_biodata( "miki", 50, "bandung")
Pada contoh diatas, Anda dapat melihat perbedaan antara function yang melewatkan keyword
argument dengan yang tidak memakai keyword argument. Contoh yang tidak memakai
keyword argument tidak akan menerima masukan sesuai yang dibutuhkan function saat urutan
argumennya diacak.
<< ___________ 7.5 hasil eksekusi fungsi_5.py >>
Keyword-length Argument pada Function
59
Keyword-length argument memiliki cara penggunaan yang sama hanya saja, keyword-length ini
menampung keyword argument yang berlebih saat diberikan kepada function yang dipanggil.
Keyword argument yang berlebih akan diterima dalam bentuk dictionary.
listing: fungsi_6.py
def cetak_perolehan_nilai( nama, twitter, **data_tambahan):
print "Nama : ", nama;
print "Twitter : ", twitter;
print "\n"
print "Data Lainnya : "
i = 1
for data in data_tambahan:
print "%s : %s" % (data, data_tambahan[data])
return;
# kalau parameter diisi semua
print "Dengan adanya keyword argument, argumen tersisa akan menjadi dictionary : "
cetak_perolehan_nilai("Silvy","@sivlysiv",email="silvysilvy@gmail.com",
facebook="www.facebook.com/silvysil", telp="0838-1234-5678")
Pada contoh diatas, keyword argument yang berlebih ditampung kedalam argument data_tambahan
dan argumen berlebih ini disimpan dalam dictionary.
<< ___________ 7.6 hasil eksekusi fungsi_6.py >>
60
Pass by Reference dan Pass by Value pada Python
Berikutnya terdapat masalah pass by value atau pass by reference. Di Python semua nilai akan
dilewatkan secara by reference. Artinya jika kita mengubah argumen di dalam fungsi maka nilai
argumen yang direferensi ini akan ikut berubah juga. Misalkan dibawah contoh berikut
terdapat sebuah list yang akan diganti dengan nilai baru, dan ada juga yang ditambahkan nilai baru.
listing : fungsi_7.py
def sebuah_fungsi(sebuah_list):
sebuah_list = [1, 2, 3, 4, 5]
print sebuah_list
def sebuah_fungsi_lainnya(sebuah_list):
sebuah_list.append([10, 20, 30])
print sebuah_list
ini_list = [10, 20, 30]
sebuah_list = [100, 200, 300]
print "apakah ini_list berubah ? "
print ini_list
sebuah_fungsi(ini_list)
print ini_list
print ini_list
sebuah_fungsi_lainnya(ini_list)
print ini_list
print "apakah sebuah_list berubah ? "
print sebuah_list
sebuah_fungsi(sebuah_list)
print sebuah_list
print sebuah_list
sebuah_fungsi_lainnya(sebuah_list)
print sebuah_list
Pada kode diatas, Anda akan melihat sebuah perbedaan yang cukup penting. saat sebuah list
diganti nilainya maka list yang ada di luar function tidak akan terpengaruh. Tapi saat kita
menambahkan data baru dengan memakai method pada list ini . Nilai diluar ikut berubah,.
Hal ini terjadi sebab pada function sebuah_fungsi_lainnya(), list sebuah_list masih menunjuk atau
merujuk ke sebuah_list yang berada diluar. Atau dalam kata lain masih menunjuk ke “address” yang
sama di memori utama.
61
<< ___________ 7.7 hasil eksekusi fungsi_7.py >>
Variable Scope pada Python
Variable scope yaitu sebuah kondisi dimana variabel diakses secara lokal pada blok kode tertentu
atau bersifat universal yang menyebabkan variabel ini dapat diakses dari blok kode manapun.
Misal ada sebuah variabel di dalam function. Variabel ini bersifat lokal dan hanya dapat
diakses didalam function ini . Lalu bagaimanakah kita menjadikan sebuah variabel agar bersifat
global ?. Di Python terdapat sebuah keyword yang bernama global. Keyword ini digunakan untuk
merujuk sebuah variabel di luar blok kode, misalnya sebuah variabel di dalam function, dengan
nama yang sama.
listing : fungsi_8.py
def sebuah_fungsi():
angka = 10
print "di dalam sebuah_fungsi, angka bernilai : ", angka
def sebuah_fungsi_lainnya():
global angka
angka = 114
print "di dalam sebuah_fungsi, angka bernilai : ", angka
angka = 6666
print "sebelum dipanggil sebuah_fungsi : ", angka
sebuah_fungsi()
print "sesudah dipanggil sebuah_fungsi : ", angka
print "\n\n"
62
print "sebelum dipanggil sebuah_fungsi_lainnya : ", angka
sebuah_fungsi_lainnya()
print "sesudah dipanggil sebuah_fungsi_lainnya : ", angka
Pada kode diatas variabel yang bernama angka dibubuhi keyword global pada function
sebuah_fungsi_lainnya(). Hasilnya saat angka diubah nilainya. Maka nilai di variabel angka yang
berada di luar blok function sebuah_fungsi_lainnya() ikut berubah.
<< ___________ hasil eksekusi fungsi_8.py >>
63
8. Mengenal Exception
Jenis – Jenis Exception
Exception yaitu sebuah cara di Python untuk menjebak error, dan menangangi error tak terduga
pada program Python yang Anda tulis. Exception akan tetap menjalankan baris kode program
dibawah bagian kode program yang error. Hal ini mempermudah proses debugging. Lalu apa
bedanya jika kita memakai kondisional biasa yang memakai if untuk mencegah error ?
Pertama Anda harus mencari cara untuk menangkap nilai – nilai yang error, misal saat membuka
file Anda harus memakai method – method yang ada pada file untuk mengetahui error atau
tidak. Kedua dengan memakai kondisional if biasa, program yang Anda tulis akan langsung
dihentikan saat error terjadi. Ketiga pengambilan error akan otomatis ditangani oleh Python dan
error ini akan ditangani sesuai dengan penanganan yang Anda lakukan, dan baris kode
program dibawahnya akan tetap dieksekusi.
Python sendiri sudah menyediakan beberapa standard error yang dapat digunakan oleh
programmer dalam menjaga pengembangan aplikasinya dari error yang tak terduga. Anda sendiri
dapat membuat error menurut definisi Anda. Hal ini akan diulas di bagian akhir bab ini.
Berikut yaitu beberapa standard error yangt terdapat di Python :
No Nama Exception Keterangan
1 Exception Menangani semua exception
2
StopIteration Exception ini muncul saat method next() tidak
menunjuk ke objek apapun saat iterasi
3 SystemExit Exception ini muncul saat sys.exit() dipanggil
4
StandardError Exception untuk menangani semua built-in
exception kecuali StopIteration dan SystemExit
5
ArithmeticError Exception untuk menangani error saat perhitungan
angka
6
OverflowError Exception ini muncul saat perhitungan angka
melebihi batas maksimum dari tipe angka yang
dihitung
7
FloatingPointError Exception ini muncul saat terdapat kegagalan
pada perhitungan angka bertipe float
8
ZeroDivisionError Exception ini muncul jika ada pembagian atau
modulus oleh 0 terhadap angka tipe apapun
10
AssertionError Exception ini muncul saat terjadi kegagalan pada
saat perintah assert dijalankan
11
AttributeError Exception ini muncul saat gagal menunjuk atribut
dari suatu objek
12 EOFError Exception ini muncul saat tidak ada input saat
64
memakai function raw_input() atau input dan
telah mencapai bagian akhir file saat pembacaan
file.
13
ImportError Exception ini muncul saat gagal saat
memakai import
14
KeyboardInterrupt Exception ini muncul saat user meng-interrupt
eksekusi program, biasanya saat menekan
kombinasi ctrl + c
15
LookupError Exception muncul saat gagal pada saat proses look
up
16
IndexError Exception ini muncul saat tidak ada indeks yang
dituju pada struktur data seperti list atau tuple
17
KeyError Exception ini muncul saat tidak ada key yang
dituju pada dictionary
18
NameError Exception ini muncul saat variabel tidak
ditemukan pada lingkup lokal di suatu function dan
kondisional atau pada lingkup global
19
UnboundLocalError Exception ini muncul saat mencoba mengakses
variabel lokal di function atau method tapi belum
ada nilainya
20
EnvironmentError Exception in muncul saat terjadi kegagalan diluar
lingkup Python
21
IOError Exception in muncul saat proses input/output
gagal, misal saat memakai print atau saat
membuka file
22
OSError Exception ini muncul saat terjadi kegagalan pada
sistem operasi yang digunakan
23
SyntaxError Exception ini muncul saat terjadi kesalahan pada
penggunaan sintaks Python
24
IndentationError Exception ini muncul saat indentasi pada blok
kode tidak sesuai penggunaannya.
25
SystemError Exception ini muncul saat terdapat masalah
internal pada interpreter, saat error ini muncul
interpreter tidak akan keluar
26
TypeError Exception ini muncul jika ada kesalahan tipe data
saat proses perhitungan, misal huruf dibagi angka
27
ValueError Exception ini muncul saat argumen yang tidak
sesuai diterima oleh builtin function
28
RuntimeError Exception ini muncul saat terjadi kesalahan yang
tidak masuk kategori manapun
29
NotImplementedEror Exception ini muncul saat abstract method dari
suatu class tidak diimplementasikan di class yang
mewarisinya.
65
Agar lebih paham dibawah ini ada beberapa contoh kode yang penggunaan exception-nya sangat
sering digunakan. Sebagai contoh pertama berikut terdapat kode yang berisi pembagian oleh angka
nol.
listing : exception_1.py
sebuah_angka = 29
try:
print sebuah_angka / 0
except:
print "proses perhitungan gagal "
print "proses cetak ini masih dapat dijalankan "
try:
print sebuah_angka / 0
except ZeroDivisionError, e:
print "proses perhitungan gagal sebab : ", e
print "proses cetak ini masih dapat dijalankan "
print sebuah_angka / 0
# jika tidak memakai exception maka proses berikutnya tidak akan dijalankan
print "apakah proses cetak ini masih dapat dijalankan ??? "
Di dalam try terdapat kode yang kemungkinan akan memunculkan exception. sedang di dalam
except yaitu kode yang akan dieksekusi jika exception ini muncul. Pada try-except yang
pertama, semua error akan ditangani dan Anda tidak akan mengetahui jenis exception apa yang
yang ditangani. Pada try-except yang kedua, Anda memprediksi akan menangani error jika terjadi
pembagian oleh nol. Manakah yang lebih baik ? Pastikan Anda sudah memiliki perkiraan apa saja
error yang akan terjadi sehingga saat debugging nanti akan mempermudah Anda untuk
memperbaiki kode program Anda. Pada blok kode try-except sekalipun error kode dibawahnya akan
tetap dieksekusi. Pada proses perhitungan di bagian akhir tidak ditangani oleh try-except sehingga
kode dibawahnya tidak dieksekusi. Berikut hasil yang diberikan jika kode dieksekusi :
66
<< ___________ 8.1 hasil eksekusi exception_1.py >>
Contoh lain yang umum dipakai yaitu IndexError dan KeyError. Kedua error ini umum dipakai
saat operasi list, tuple, dan dictionary. Berikut terdapat contoh menunjuk indeks dan key yang tidak
terdapat pada list, tuple, dan dictionary yang didefinisikan dalam kode dibawah ini.
listing : exception_2.py
sebuah_list = [1, 2, 3, 4, 5]
sebuah_tuple = (1, 2, 3, 4, 5)
sebuah_dictionary = {'nama':'Mangaraja', 'email':'mangaraja@yahoo.com'}
try:
print sebuah_list[10]
except IndexError, e:
print "proses gagal sebab : ", e
print "proses cetak ini masih dapat dijalankan "
try:
print sebuah_tuple[10]
except IndexError, e:
print "proses gagal sebab : ", e
print "proses cetak ini masih dapat dijalankan "
try:
print sebuah_dictionary['website']
except KeyError, e:
print "proses gagal sebab : ", e
print "proses cetak ini masih dapat dijalankan "
67
Pada contoh diatas “sebuah_list” dan “sebuah_tuple” ditangani oleh try-except yang menangani
exception IndexError. Pada masing – masing blok, kita ingin mencoba indeks yang tidak ada pada
list dan tuple ini . sedang pada blok try-except untuk dictionary, kita ingin mencoba
menunjuk key “website” tapi sebab key ini tidak ada, maka akan muncul exception KeyError.
<< ___________ 8.2 hasil eksekusi exception_2.py >>
Berikutnya contoh exception yang tak kalah populer lainnya yaitu AttributeError. Exception ini
muncul saat sebuah class tidak memiliki atribut (variabel) yang diakses oleh programmer. Hal ini
sangat penting untuk diperhatikan saat merancang sebuah aplikasi berbasis objek. Anda harus
memeriksa apakah atribut yang Anda akses pada sebuah kelas ada pada saat perancangan atau tidak.
Jika tidak yakin gunakanlah try-except untuk menjebak AttributeError ini .
listing : exception_3.py
class PersegiPanjang:
panjang = 0
lebar = 0
def __init__(self, p, l):
self.panjang = p
self.lebar = l
prsg_pjg = PersegiPanjang(10, 5)
try:
print "panjang : ", prsg_pjg.panjang
print "lebar : ", prsg_pjg.lebar
print "tinggi :", prsg_pjg.tinggi
except AttributeError, e:
print "proses pemanggilan atribut gagal sebab --> ", e
68
print "proses cetak ini masih dapat dijalankan"
Pada contoh diatas, kita ingin mencoba mengakses atribut tinggi pada objek prsg_pjg. Sebelumnya
tahapan yang dilalui yaitu proses instansiasi, dimana kita memanggil sebuah template objek yang
akan dibentuk kedalam sebuah variabel. lalu di bagian try-except ini kita coba akses
atribut tinggi. sebab atribut ini tidak ada di kelas persegi panjang, maka exception
AttributeError akan muncul.
<< ___________ 8.3 hasil eksekusi exception_3.py >>
Contoh yang terakhir dari sekian banyak exception yang terdapat di Python yaitu IOError.
Exception ini biasa terjadi saat proses input data, saat mencetak data, atau saat operasi file. Pada
contoh berikut kita akan membuka sebuah file, tapi file ini tidak ada. Secara default jika kita
membuka file tanpa menyertakan mode pembacaan, maka mode ini yaitu mode 'r' yang
artinya read atau baca.
listing : exception_4.py
try :
f = open('nilai.txt')
except IOError, e:
print "Proses pembukaan file gagal sebab : ", e
print "proses cetak pada baris ini masih dapat dijalankan"
Pada contoh diatas kita ingin file nilai.txt, tapi sebab file ini belum pernah ditulis sebelumnya
maka exception akan muncul yaitu IOError. Selain digunakan untuk file, IOError dapat terjadi juga
saat pembacaan built-in storage milik Python seperti saat pembacaan pickle, shelve, dan marshal.
69
<< ___________ 8.4 hasil eksekusi exception_4.py >>
Menyusun Multiple Except
Apakah kita dapat menangkap exception dalam satu blok try-except ?. Di Python sendiri terdapat
fitur multiple except, yaitu kita dapat menangkap exception dengan baris except yang berbeda. Hal
ini dilakukan jika kita ingin memberikan perlakuan berbeda kepada setiap exception yang ditangani.
Lebih lemgkapnya pantau kode dibawah ini.
listing : exception_5.py
try:
angka1 = int(raw_input('masukkan angka ke-1 : '))
angka2 = int(raw_input('masukkan angka ke-2 : '))
print 'hasil perhitungan : ', angka1 / angka2
except ZeroDivisionError, e:
print "proses pembagian gagal sebab : ", e
except ValueError, e:
print "proses perhitungan gagal sebab : ", e
print "proses cetak ini masih dapat dijalankan "
Pada kode diatas kita mencoba menjebak dua buah exception dengan dua baris except berbeda. Hal
ini dilakukan agar perlakuan pada penanganan setiap exception memiliki penanganan yang
berbeda. Misal pada baris except pembagian nol ada informasi “proses pembagian gagal sebab : “ ,
sedang di baris except nilai error terdapat informasi “proses perhitungan gagal sebab : “. Jadi
dengan memakai baris except yang berbeda Anda dapat menangani error yang berbeda sesuai
kebutuhan Anda.
70
<< ___________ 8.5 hasil eksekusi exception_5.py >>
memakai Multiple Exception
Berbeda sedikit pada contoh sebelumnya, jika pada setiap exception ditangani oleh setiap baris
except. Maka pada kaidah multiple exception di satu except menangani beberapa exception.
Bedanya, semua exception yang ditangani baris except ini akan mendapat penanganan yang
sama.
listing : exception_6.py
try:
angka1 = float(raw_input('masukkan angka ke-1 : '))
angka2 = float(raw_input('masukkan angka ke-2 : '))
print 'hasil perhitungan : ', angka1 / angka2
except (ZeroDivisionError, ValueError, TypeError), e:
print "proses perhitungan gagal sebab : ", e
print "proses cetak ini masih dapat dijalankan "
Kode diatas jika dieksekusi akan muncul tampilan seperti berikut :
71
<< ___________ 8.6 hasil eksekusi exception_6.py >>
Try-Except Bersarang
Mirip seperti kondisional atau perulangan yang dapat ditambahkan blok kode kondisional atau
perulangan didalamnya. Try-except pun memiliki kaidah yang sama dimana try-except dapat
disimpan didalam try-except yang lainnya. Prioritasnya yaitu tangani yang luar terlebih dahulu.
Jika terjadi di try-except terluar maka blok kode didalamnya yang terdapat try-except tidak akan
dieksekusi. Jika di blok luar tidak terdapat error. Maka penanganan exception di try-except bagian
dalam akan dilakukan.
listing : exception_7.py
try:
angka1 = float(raw_input('masukkan angka ke-1 : '))
angka2 = float(raw_input('masukkan angka ke-2 : '))
try :
print 'hasil perhitungan : ', angka1 / angka2
except ZeroDivisionError, e:
print "proses perhitungan gagal sebab : ", e
except ValueError, e:
print "proses input gagal sebab : ", e
print "proses cetak ini masih dapat dijalankan "
Jika pada contoh exception_5.py baris except ZeroDivisionError disimpan di tingkat pertama,
sekarang baris ini disarangkan di try-except yang utama. Dengan demikian Anda dapat
menangani exception dari dalam secara langsung.
72
<< ___________ 8.7 hasil eksekusi exception_7.py >>
Membuat Exception Sendiri
Lalu apakah kita terbatas pada penanganan standard exception Python saja ?. Anda dapat membuat
exception Anda sendiri dengan membuat sebuah kelas yang diturunkan dari kelas Exception.
Dengan cara ini , Anda dapat membuat exception Anda sesuai kebutuhan pada kasus yang akan
Anda tangani. Misal kita ingin membuat sebuah exception jika angka yang dimasukkan yaitu
angka negatif. Pertama kita buat dulu class nya dengan nama yang diingikan, turunkan dari kelas
Exception, dan tentukan penanganan error pada method – method di kelas ini .
listing : exception_8.py
class NegativeValueError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
s = "Tidak menerima angka kurang dari 0 " + str(self.value)
return s
def cekAngka(angka):
if angka < 0:
raise NegativeValueError(angka)
try:
sebuah_angka = int(raw_input("masukkan sebuah angka : "))
cekAngka(sebuah_angka)
except (NegativeValueError, TypeError), e:
73
print "proses gagal sebab : ", e
Untuk memanggil exception-nya kita memerlukan keyword raise saat exception ini
dimunculkan maka exception akan ditangani except dan mengeluarkan pesan error-nya. Pesan
ini berasal dari function __str__() yang sebelumnya telah kita definisikan pada kelas
NegativeValueError.
<< ___________ 8.8 hasil eksekusi exception_8.py >>
memakai “finally” pada Try-Except
Dan akhirnya sekarang kita membahas finally. Keyword ini digunakan untuk menentukan
penanganan apa yang harus dilakukan baik saat exception muncul atau tidak. Misal saat
mengambil data dari database, kita tidak akan tahu ada kegagalan apa yang akan terjadi. Agar
program kita tetap aman dan data tidak rusak. Maka baik terjadi kegagalan atau tidak koneksi ke
database harus ditutup. Hal ini juga bisa terjadi saat pembacaan file. Untuk mencegah
kerusakan file, baik akan terjadi error atau tidak, file harus ditutup. Di blok finally ini penanganan
yang terjadi saat exception muncul atau tidak disimpan.
listing : exception_9.py
try:
angka1 = float(raw_input('masukkan angka ke-1 : '))
angka2 = float(raw_input('masukkan angka ke-2 : '))
try :
print 'hasil perhitungan : ', angka1 / angka2
except ZeroDivisionError, e:
print "proses perhitungan gagal sebab : ", e
except ValueError, e:
print "proses input gagal sebab : ", e
finally:
74
print "coba perhatikan lagi nilai yang anda masukkan "
print "proses cetak ini masih dapat dijalankan "
Kode diatas jika dieksekusi akan muncul tampilan seperti berikut :
<< ___________ 8.9 hasil eksekusi exception_9.py >>
9. Membuat File
Pengenalan File
Biasanya jika kita tidak memakai file, hasil pemrosesan data hanya akan disimpan di main
memory. sesudah program dihentikan atau tiba – tiba komputer Anda mati, semua data akan hilang.
Lalu bagaimana jika ingin memakai kembali data yang sudah diproses sebelumnya ?. Untuk
menyimpan data agar bisa diproses di kesempatan selanjutnya, misal komputer dimatikan lalu
dinyalakan lagi hari esoknya. Kita butuh sebuah penyimpanan yang bersifat resident dan disimpan
di secondary storage seperti harddisk. Python sendiri menyediakan beberapa media penyimpanan
yang bisa digunakan oleh programmer Python, ada file, shelve, marshal, pickle, dan sqlite3.
Pada bab ini kita akan bahas mengenai file berupat txt. File di Python bisa berupa txt, csv, atau jenis
lainnya. Txt merupakan contoh file yang sering digunakan. File jenis ini berisi plain text. File jenis
ini menyimpan karakter ascii standard yang diterima dari user.
Pada pembuatan file terdapat beberapa mode dalam manipulasi file. Berikut daftar mode manipulasi
file ini :
No Mode Keterangan
1 r Membuka file dan hanya untuk pembacaan
saja. Pointer file akan ditempatkan di awal
file. Jika pada saat pembukaan file tidak
disertakan mode manipulasi file, maka mode
75
ini secara default dipakai untuk manipulasi
file
2 w
Membuka file dan hanya untuk penulisan
saja. Jika file yang dibuka sudah ada dan
memakai mode 'w', maka file ini
akan ditimpa. Jika file tidak ada maka akan
dibuatkan file baru.
3 a
Membuka file untuk penambahan isi file.
Pointer file disimpan di bagian akhir file jika
file ini ada. Jika file tidak ada maka akan
dibuatkan file baru.
4 b
Mode ini ditambahkan masing – masing pada
mode r, w,a menjadi rb, wb, ab. Dengan
menambahkan mode b pada setiap mode
manipulasi standar. Maka pemba file caan file
akan dilakukan dalam format biner
5 +
Mode ini ditambahkan kedalam mode r, w, a.
r+ : baca dan tulis
w+ : tulis dan baca
a+ : tambah dan baca
Membuat File Baru
Agar lebih paham kita akan mencoba membuat sebuah file txt. Pertama kita biasakan cegah error
dengan memakai try-except dan tangkap exception IOError, agar jika terjadi error kelak, kita
bisa menanganinya dengan lebih mudah. lalu di dalam blok try-except ini buat sebuah
objek file dengan memakai built-in function open(). Pada function ini terdapat dua
parameter yang biasa digunakan yaitu, nama file serta mode manipulasi file-nya. sebab kita ingin
membuat file baru, maka mode “w” digunakan pada kasus pertama berikut :
listing : file_1.py
try:
sebuah_file = open("absen.txt", 'w')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
except IOError, e:
print "proses gagal sebab : ", e
saat kita sudah membuka sebuah file dan terbentuk objek file. Kita dapat mengakses method dan
76
atribut pada objek file ini . Atribut yang sering diakses untuk pemrosesan file antara lain :
name, mode, closed. Atribut name yaitu nama file ini , mode yaitu mode manipulasi file
ini , dan closed menyatakan apakah file ini sudah ditutup atau belum. sedang method
yang diakses diatas yaitu close(), yang digunakan untuk menutup file sesudah penggunaan file
selesai. Dengan menutup file, penggunaan memori utama akan dihemat. Jika tidak pernah menutup
file dalam jumlah yang banyak bisa menyebabkan memory leak. Jadi berhati – hatilah :D.
<< ___________ 9.1 hasil eksekusi file_1.py >>
Mengisi File
Pada contoh pertama, file yang kita buat masih kosong, belum berisi. Sesuai namanya kita sedang
membuat file bernama 'absen.txt', yang didalamnya akan terdapat daftar hadir perkuliahan. Dengan
memakai method write(), kita bisa menambahkan isi pada file 'absen.txt', dan yang akan kita
isikan yaitu teks. Method ini memerlukan parameter sebuah string yang akan ditulis di lokasi
tertentu pada file berdasarkan posisi pointer file berada.
listing : file_2.py
try:
sebuah_file = open("absen.txt", 'w')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
sebuah_file.write('1. Jajang Surahman, Teknik Informatika, ITENAS\n')
sebuah_file.write('2. Angel Corine, Manajemen Informatika, UNIKOM\n')
sebuah_file.write('3. Samsul Basri, Ilmu Komputer, UPI\n')
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
77
except IOError, e:
print "proses gagal sebab : ", e
sesudah kita menambahkan isi pada file teks yang kita buat, kita dapat membuka file yang telah
dibuat dengan teks editor dan dapat melihat isi dari file ini .
<< ___________ 9.2 hasil eksekusi file_2.py >>
Membaca Isi File
sesudah mengisi file dengan method write(). Sekarang kita akan memakai method read() untuk
membaca file. Pastikan, file yang akan dibaca harus dalam mode 'r', jika tidak dalam mode ini ,
misal dalam mode 'w', maka akan muncul error : ”OError: File not open for reading”. lalu
untuk mengetahui posisi pointer file berada, kita gunakan method tell().
listing : file_3.py
try:
sebuah_file = open("absen.txt", 'r')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
print "isi file : \n", sebuah_file.read()
print "posisi pointer pada file : ", sebuah_file.tell()
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
except IOError, e:
print "proses gagal sebab : ", e
78
Dengan memakai method read(), kita dapat melihat isi dari file ini . Tapi method ini
membaca sekaligus isi file yang dibaca, tidak perbaris. Jika pembacaan dilakukan sekaligus, ruang
memori yang dibutuhkan jauh lebih besar daripada file yang dibaca perbaris. lalu dengan
adanya method tell(), kita bisa mengetahui posisi pointer file berada dimana, agar mempermudah
saat manipulasi file.
<< ___________ 9.3 hasil eksekusi file_3.py >>
Membaca Isi File dengan Cara Baris Per Baris
Jika pada contoh sebelumnya pembacaan file dilakukan sekaligus, pada contoh kali ini pembacaan
file akan dilakukan baris perbaris. Pembacaan file teks dengan membaca perbaris ini bisa dilakukan
dengan memakai pengulangan for. File ini diperlakukan layaknya list yang digunakan di
pengulangan for. Disini file dianggap sebagai list yang berisi elemen string.
listing : file_4.py
try:
sebuah_file = open("absen.txt", 'r')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
print "isi file : \n"
for line in sebuah_file:
print line
79
print "posisi pointer pada file : ", sebuah_file.tell()
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
except IOError, e:
print "proses gagal sebab : ", e
Hasil yang diperlihatkan hampir sama dengan contoh sebelumnya hanya saja teknik pembacaannya
sedikit berbeda. Jika file berukuran besar, akan lebih bijak jika kita membacanya perbaris agar
ruang memori yang digunakan tidak banyak terpakai.
<< ___________ 9.4 hasil eksekusi file_4.py >>
Mengatur Posisi Pointer File
Suatu saat kita ingin mengisi file di lokasi tertentu di sebuah file. Biasanya kita menambahkan file
di bagian akhir file, atau membaca file selalu dibagian awal file. Ada saatnya kita ingin membaca di
posisi ke 15 dari awal file, atau posisi -15 karakter dari pointer file. Di objek file terdapat method
yang dinamakan seek(). Method ini memiliki dua buah paramater yaitu jarak yang diinginkan
dan patokan jarak ini . Jika parameter kedua diisi oleh angka 0, berarti patokan berada di awal
file. Jika parameter kedua diisi oleh angka 1, berarti patokan berada di tempat pointer file berada.
Jika parameter kedua diisi oleh angka 2, maka patokan berada di bagian akhir file. Jika parameter
pertama diisi angka positif maka penentuan jarak akan dihitung ke sebelah kanan, jika diisi angka
negatif maka penentuan jarak akan dihitung ke sebelah kiri.
listing : file_5.py
try:
sebuah_file = open("absen.txt", 'rb')
print "nama file yang tadi dibuat : ", sebuah_file.name
print "mode pembacaan file : ", sebuah_file.mode
80
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
print "isi file : \n"
for line in sebuah_file:
print line
print "posisi pointer pada file : ", sebuah_file.tell()
print "kembali lagi ke awal : ", sebuah_file.seek(0, 0)
print "isi file : \n"
for line in sebuah_file:
print line
print "posisi pointer pada file : ", sebuah_file.tell()
sebuah_file.close()
print "apakah filenya udah ditutup ? : ", sebuah_file.closed
except IOError, e:
print "proses gagal sebab : ", e
Pada contoh diatas, pointer file dipindahkan kembali ke posisi awal. Dengan memberikan jarak 0,
dan menentukan patokan di awal file, maka posisi pointer file pindah ke bagian awal file. Dengan
demikian file bisa dibaca ulang untuk kedua kalinya.
<< ___________ 9.5 hasil eksekusi file_5.py >>
81
Mengganti Nama File
Dalam manipulasi file, terdapat operasi seperti pengubahan nama file, memindahkan file, ataupun
menghapus file. Python sendiri menyediakan module os yang didalamnya terdapat fitur- fitur
ini . Sebagai contoh pertama kita akan mengganti nama file dari “absen.txt” ke “daftar-
hadir.txt”. Pertama kita harus meng-import modul os. lalu kita gunakan method rename().
Method ini memiliki dua parameter yaitu nama file yang akan diubah namanya, dan nama baru
yang diinginkan.
listing : file_6.py
import os
try:
os.rename('absen.txt', 'daftar-hadir.txt')
print "Nama file sudah diubah.."
except (IOError, OSError), e:
print "proses error sebab : ", e
sesudah kode diatas dijalankan, coba lihat file yang sebelumnya “absen.txt” akan berubah menjadi
“daftar-hadir.txt”.
<< ___________ 9.6 hasil eksekusi file_6.py >>
Menghapus File
Contoh lainnya yaitu menghapus file. Kita bisa gunakan method remove() untuk menghapus file
yang diinginkan. Parameter yang dibutuhkan yaitu nama file yang akan dihapus.
listing : file_7.py
82
import os
try:
os.remove('daftar-hadir.txt')
print "File sudah dihapus.."
except (IOError, OSError), e:
print "proses error sebab : ", e
lalu jika file sudah dihapus, kita tidak dapat membuka file ini . sebab file ini sudah
hilang dari penyimpanan sekunder.
<< ___________ 9.7 hasil eksekusi file_7.py >>
Untuk contoh – contoh lainnya Anda bisa membuka dokumentasi resmi Python, atau coba kunjungi
beberapa website yang ada di lampiran – 2.
83
10. Pengenalan Class
Membuat Class dan Object
Pemrograman berorientasi objek atau dalam bahasa inggris dikenal dengan Object Oriented
Programming (OOP), merupakan sebuah paradigma pemrograman dimana kita memodelkan
perangkat lunak kita dari berbagai kumpulan objek yang saling berinteraksi. Objek ini
memiliki karakteristik dan aksi. Di dalam OOP, karakteristik ini berupa variabel yang
dinamakan atribut. lalu aksi yang dimiliki objek ini berupa method yang menghasilkan
output atau cuma melakukan aksi saja tanpa output. Ada istilah lain juga yang menyebut aksi
sebuah objek sebagai perilaku atau behaviour. Objek itu sendiri memiliki template yang
diistilahkan dengan kelas atau class. Sebuah kelas merupakan template bagi objek – objek yang
akan dibuat. Proses pembuatan objek baru dinamakan dengan instansiasi.
Ada beberapa hal yang harus diingat dalam membuat sebuah kelas. Pertama keyword class,
keyword ini digunakan untuk mendefinisikan sebuah kelas. Disusul dengan nama kelas yang
diinginkan dan tanda titik dua. Blok kode kelas ini ditulis sesudah tanda titik dua ini , dan
seperti biasa diperlukan indentasi agar blok kode yang kita tulis masuk kedalam blok kode kelas.
Kedua yaitu konstruktor, di Python konstruktor ditulis dengan sebuah function bernama
__init__() . Method dan function sebenarnya sama, hanya saja beda istilah pada paradigma OOP.
Method __init__() ini merupakan method yang akan selalu dieksekusi saat instansiasi objek.
Biasanya __init__() digunakan untuk mengisi variabel dengan nilai awal pada atribut – atribut yang
dimiliki objek. Ketiga yaitu keyword self, keyword ini digunakan pada method yang akan
dinyatakan sebagai method dari kelas yang kita rancang. Keyword ini disertakan di parameter
pertama. Jika method ini tidak disertakan self pada method yang dimiliki kelas ini , akan
muncul error : “TypeError: nama_function() takes exactly n arguments (1 given)
” yang artinya method ini tidak bisa dipanggil oleh objek yang telah terinstansiasi.
Sebagai contoh disini kita akan membuat sebuah kelas bernama PersegiPanjang yang memiliki dua
atribut yaitu panjang dan lebar. Kelas ini memiliki lima method yang terdiri dari :
__init__(), konstruktor kelas persegi panjang
hitung_luas(), method untuk menghitung luas persegi panjang
hitung_keliling(), method untuk menghitung keliling persegi panjang
____________persegi_panjang(), meng___________ persegi panjang yang direpresentasikan dengan
kumpulan bintang.
____________persegi_panjang_tanpa_isi(), meng___________ persegi panjang tetapi hanya batas
luarnya saja, isinya tak di___________.
listing : class_1.py
84
class PersegiPanjang:
def __init__(self, panjang, lebar):
self.panjang = panjang
self.lebar = lebar
def hitung_luas(self):
return self.panjang * self.lebar
def hitung_keliling(self):
return (2*self.panjang) + (2*self.lebar)
def ____________persegi_panjang(self):
for i in range(0, self.lebar):
for j in range(0, self.panjang):
print '*',
print ""
def ____________persegi_panjang_tanpa_isi(self):
for i in range(0, self.lebar):
if i > 0 and i < self.lebar-1:
for j in range(0, self.panjang):
if j > 0 and j < self.panjang-1:
print ' ',
else:
print '*',
else:
for j in range(0, self.panjang):
print '*',
print ""
PersegiPanjangA = PersegiPanjang(20, 10)
PersegiPanjangB = PersegiPanjang(10, 5)
print "Panjang persegi panjang A :", PersegiPanjangA.panjang
print "Lebar persegi panjang A :", PersegiPanjangA.lebar
print "Luas persegi panjang A : ", PersegiPanjangA.hitung_luas()
print "Keliling persegi panjang A : ", PersegiPanjangA.hitung_keliling()
print "Meng___________ Persegi Panjang A : "
PersegiPanjangA.____________persegi_panjang()
print "\nMeng___________ Persegi Panjang A hanya tepinya saja : "
PersegiPanjangA.____________persegi_panjang_tanpa_isi()
print "\n"
print "Panjang persegi panjang B :", PersegiPanjangB.panjang
print "Lebar persegi panjang B :", PersegiPanjangB.lebar
print "Luas persegi panjang B : ", PersegiPanjangB.hitung_luas()
85
print "Keliling persegi panjang B : ", PersegiPanjangB.hitung_keliling()
PersegiPanjangB.____________persegi_panjang()
print "\nMeng___________ Persegi Panjang B hanya tepinya saja : "
PersegiPanjangB.____________persegi_panjang_tanpa_isi()
Proses instansiasi dilakukan dengan menentukan nama objek yang diinginkan lalu panggil
nama kelas yang akan diinginkan dan masukan parameter awal yang dibutuhkan. lalu saat
objek berhasil dibuat, kita bisa mengakses atribut dan method dari objek ini . Seperti yang kita
lakukan pada manipulasi file, kita bisa mengakses method close(), write(), dan read() serta
mengakses atribut close, name, dan mode. Dengan parameter berbeda namun karakterisitik sama,
persegi panjang yang dihasilkan jadi beragam.
Tujuan dari OOP ini sendiri, menghemat penulisan kode program yang kita buat. Tanpa OOP kita
harus membuat atribut untuk setiap objek. Dan penulisan kode program pun menjadi menumpuk,
sebab untuk method yang sama harus di t
