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():

python
umur = int("25")
berat = float("62.5")
nama = str(42)
aktif = bool(1)
print(umur)
print(berat)
print(nama)
print(aktif)

Output yang Dihasilkan:

text
25
62.5
42
True

Mari kita telaah baris-baris kode di atas:

  1. Baris 1 (umur = int("25")): constructor int() mengubah string "25" menjadi bilangan bulat 25, siap dipakai berhitung.
  2. Baris 2 (berat = float("62.5")): constructor float() mengubah string "62.5" menjadi bilangan pecahan.
  3. Baris 3 (nama = str(42)): constructor str() mengubah angka 42 menjadi string "42", siap digabung dengan teks lain.
  4. Baris 4 (aktif = bool(1)): constructor bool() mengevaluasi 1 sebagai truthy, hasilnya True.

Perilaku int() terhadap pecahan patut dicatat: bagian desimal dipotong ke arah nol, bukan dibulatkan. Dua contoh berikut memperlihatkan arah pemotongannya:

python
print(int(9.99))
print(int(-9.99))
print(float(7))

Output yang Dihasilkan:

text
9
-9
7.0

Nilai 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:

python
hasil = 5 + 2.0
print(hasil)
print(type(hasil))

Output yang Dihasilkan:

text
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:

python
umur = int("dua puluh")
print(umur)

Output yang Dihasilkan:

text
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:

python
umur = 25
print("Umur: " + umur)

Output yang Dihasilkan:

text
TypeError: can only concatenate str (not "int") to str

Operator + 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.