Nilai sering berpindah tipe sepanjang perjalanan program: input pengguna datang sebagai string, aritmetika membutuhkan angka, dan laporan akhir ingin teks rapi. Proses perpindahan tersebut dinamakan type conversion. Python menganut filosofi explicit is better than implicit — konversi sebaiknya dituliskan dengan jelas — dan pada Chapter ini kita akan mempelajari konversi eksplisit lewat constructor, konversi implisit yang diam-diam dilakukan interpreter, serta dua galat yang mengintai saat konversi gagal.
Konversi Eksplisit dengan Constructor #
Empat constructor bawaan menjadi alat konversi utama sehari-hari: int(), float(), str(), dan bool():
umur = int("25")
berat = float("62.5")
nama = str(42)
aktif = bool(1)
print(umur)
print(berat)
print(nama)
print(aktif)Output yang Dihasilkan:
25
62.5
42
TrueMari kita telaah baris-baris kode di atas:
- Baris 1 (
umur = int("25")): constructorint()mengubah string"25"menjadi bilangan bulat25, siap dipakai berhitung. - Baris 2 (
berat = float("62.5")): constructorfloat()mengubah string"62.5"menjadi bilangan pecahan. - Baris 3 (
nama = str(42)): constructorstr()mengubah angka42menjadi string"42", siap digabung dengan teks lain. - Baris 4 (
aktif = bool(1)): constructorbool()mengevaluasi1sebagai truthy, hasilnyaTrue.
Perilaku int() terhadap pecahan patut dicatat: bagian desimal dipotong ke arah nol, bukan dibulatkan. Dua contoh berikut memperlihatkan arah pemotongannya:
print(int(9.99))
print(int(-9.99))
print(float(7))Output yang Dihasilkan:
9
-9
7.0Nilai 9.99 menjadi 9 dan -9.99 menjadi -9 — keduanya bergerak ke arah nol. Sementara itu, float(7) menaikkan bilangan bulat menjadi pecahan 7.0, dan prosesnya tidak memotong apa pun.
Konversi Implisit oleh Interpreter #
Untuk operasi campuran antar tipe numerik, interpreter Python melakukan konversi implisit secara otomatis — selalu ke arah tipe yang lebih presisi:
hasil = 5 + 2.0
print(hasil)
print(type(hasil))Output yang Dihasilkan:
7.0
<class 'float'>Interpreter Python menaikkan 5 (bertipe int) menjadi 5.0 (bertipe float) sebelum menjumlahkan, supaya presisi pecahan 2.0 tidak hilang. Inilah satu-satunya konversi implisit yang dilakukan Python, dan batasnya tegas: string tidak pernah dikonversi implisit ke angka atau sebaliknya.
Error Saat Konversi Gagal #
Konversi gagal dalam dua keluarga galat. Pertama, ValueError: isi nilai tidak bisa diolah oleh constructor yang dituju:
umur = int("dua puluh")
print(umur)Output yang Dihasilkan:
ValueError: invalid literal for int() with base 10: 'dua puluh'Interpreter Python menghentikan program karena constructor int() hanya menerima string berformat angka seperti "25". Perlu dicatat pula bahwa int("42.0") tetap gagal — string berisi pecahan harus melalui float() terlebih dahulu, lalu dipotong bila perlu.
Kedua, TypeError: operasi dilakukan antara tipe yang tidak kompatibel dan Python menolak menebak konversinya:
umur = 25
print("Umur: " + umur)Output yang Dihasilkan:
TypeError: can only concatenate str (not "int") to strOperator + pada string hanya mau bergabung dengan string lain; interpreter Python menolak mengubah umur secara diam-diam. Solusinya eksplisit: print("Umur: " + str(umur)). Perilaku ini kontras dengan JavaScript atau PHP yang memilih mengonversi otomatis — Python lebih memaksa niat tertulis agar tidak ada konversi yang tak disengaja.
Cara menangkap kedua galat ini dengan try/except agar program tidak langsung berhenti akan kita pelajari pada Section Exception Handling.