Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

7 Kesalahan Umum Saat Koding Python bagi Pemula

Posted on August 11, 2025

Sebagai pemrogram pemula, wajar jika melakukan kesalahan. Namun, beberapa kesalahan terjadi karena kurangnya pemahaman tentang sifat bahasa pemrograman itu sendiri. Artikel ini mengulas beberapa kesalahan paling umum yang mungkin Anda lakukan saat memprogram di Python, memberikan penjelasan, dan solusi yang tepat.

1. Memodifikasi Daftar Saat Iterasi

Memodifikasi daftar (list) Python saat Anda mengulanginya mungkin terdengar seperti jalan pintas yang cerdas, tetapi ini adalah jebakan umum di Python. Kesalahan ini dapat menyebabkan perilaku tak terduga, seperti melewatkan elemen atau menghasilkan daftar yang kacau.

Misalnya, Anda memiliki daftar angka dan ingin menghapus semua angka yang kurang dari 5.

numbers = [1, 2, 6, 3, 7, 4, 8, 5]
print("Daftar asli:", numbers)

for number in numbers:
if number < 5:
numbers.remove(number)

print("Daftar yang dimodifikasi (salah!):", numbers)

Jika Anda menjalankan kode ini, Anda akan menemukan bahwa angka 2 masih ada dalam daftar. Ini terjadi karena saat Anda menghapus elemen, daftar menyusut, dan indeks elemen berikutnya bergeser. Ini dapat menyebabkan perulangan melewatkan elemen. Misalnya, ketika 1 dihapus, 2 berpindah ke posisi lama 1, tetapi penghitung internal perulangan sudah bergerak, berpotensi melewati 2.

Solusi:

Cara teraman dan paling umum untuk memodifikasi daftar berdasarkan elemennya adalah dengan mengulang salinan daftar atau membuat daftar baru dengan hanya elemen yang ingin Anda pertahankan.

Menggunakan Salinan Daftar

Anda dapat membuat salinan dangkal (shallow copy) dari daftar sebelum iterasi. Dengan cara ini, Anda dapat menghapus elemen dari daftar asli tanpa memengaruhi proses iterasi.

numbers = [1, 2, 6, 3, 7, 4, 8, 5]
print("Daftar asli:", numbers)

for number in numbers[:]: # Iterasi pada slice (salinan) daftar
if number < 5:
numbers.remove(number)

print("Daftar yang dimodifikasi (diperbaiki dengan salinan):", numbers)

Dengan menggunakan numbers[:], Anda membuat slice dari daftar numbers, yang merupakan salinan dangkal. Perulangan for kemudian beriterasi pada salinan ini, sepenuhnya independen dari modifikasi apa pun yang Anda lakukan pada daftar numbers asli.

Membuat Daftar Baru

Seringkali, cara yang lebih Pythonic untuk mencapai ini adalah dengan membuat daftar baru yang hanya berisi item yang ingin Anda simpan. Pendekatan ini menghindari modifikasi di tempat sama sekali dan seringkali lebih efisien.

numbers = [1, 2, 6, 3, 7, 4, 8, 5]
print("Daftar asli:", numbers)

filtered_numbers = [number for number in numbers if number >= 5]
print("Daftar yang difilter (metode daftar baru):", filtered_numbers)

Dalam kode ini, Anda menggunakan list comprehension untuk membuat daftar baru dari daftar asli yang berisi elemen yang Anda inginkan. Ini juga menjaga daftar asli tetap utuh.

2. Konflik Penamaan

Memilih nama variabel dan file mungkin tampak seperti detail kecil sampai Python menghasilkan kesalahan. Penamaan yang buruk dapat menyebabkan bug aneh, fungsionalitas yang ditutupi (shadowed functionality), dan kebingungan berjam-jam. Ini terjadi dalam dua cara umum: menggunakan kata kunci Python atau nama bawaan sebagai nama Anda sendiri, dan secara tidak sengaja menamai skrip Anda sama dengan modul Python yang sudah ada.

Menggunakan Kata Kunci atau Nama Bawaan:

Python tidak akan menghentikan Anda untuk menamai variabel list, str, atau bahkan sum. Namun, hanya karena Anda bisa, bukan berarti Anda harus melakukannya.

list = [1, 2, 3]
print(list)

list = list('123')

Kode ini akan berjalan tanpa masalah pada awalnya. Namun, jika Anda menambahkan baris lain yang berisi fungsi list() di Python, Anda akan mendapatkan kesalahan. Ini karena Anda telah menimpa fungsi list() bawaan dengan objek daftar Anda sendiri. Ketika Anda mencoba memanggil list(‘123’), Python mengira Anda mencoba memanggil daftar Anda sendiri, bukan fungsi bawaan.

Solusi: Selalu gunakan nama deskriptif yang tidak bertabrakan dengan fitur inti Python.

numbers = [1, 2, 3]
converted = list('123')

Ini tidak hanya membantu Anda menghindari penggunaan kata kunci yang dicadangkan, tetapi juga merupakan praktik yang baik untuk keterbacaan kode dan debugging.

Menamai Skrip Sama dengan Modul yang Ada:

Hal yang sama berlaku untuk menamai file skrip Anda. Misalkan Anda membuat file bernama random.py untuk bereksperimen dengan angka acak:

# random.py
import random

print(random.randint(1, 10))

Ketika Anda menjalankan ini, Anda kemungkinan akan melihat kesalahan yang mengeluh bahwa “module ‘random’ has no attribute ‘randint’.” Python mengimpor file Anda sendiri (random.py) alih-alih modul random yang sebenarnya dari pustaka standar. Ini adalah bug penutupan (shadowing bug) klasik.

Solusi: Hindari menamai skrip Anda sama dengan modul yang sudah ada seperti random.py, math.py, os.py, atau json.py. Dan jika Anda tidak sengaja melakukannya, jangan lupa untuk menghapus folder .pyc atau __pycache__ yang sesuai setelah mengganti nama.

3. Argumen Fungsi yang Dapat Diubah (Mutable)

Python memungkinkan Anda mengatur nilai default untuk argumen fungsi, yang sangat nyaman. Namun, ketika nilai default tersebut dapat diubah (seperti daftar atau kamus), Anda berjalan ke jebakan bug tersembunyi. Objek mutable default hanya dibuat sekali, saat fungsi didefinisikan, bukan setiap kali dipanggil. Itu berarti jika dimodifikasi, perubahan itu akan tetap ada untuk panggilan berikutnya.

def add_item_to_list(item, item_list=[]):
item_list.append(item)
return item_list

print(add_item_to_list("apple"))
print(add_item_to_list("banana"))

Ketika Anda menjalankan kode ini, Anda mungkin mengharapkan setiap panggilan ke add_item_to_list() untuk dimulai dengan daftar kosong yang baru jika Anda tidak menyediakannya. Namun, output akan menunjukkan sesuatu yang tidak terduga: “apple” masih ada pada panggilan kedua. Daftar item_list hanya dibuat sekali, jadi setiap panggilan ke fungsi terus memodifikasi daftar yang sama. Ini mengarah pada perilaku yang mengejutkan dan sangat bermasalah.

Solusi: Untuk memperbaikinya, Anda dapat menggunakan None sebagai default dan membuat daftar di dalam fungsi:

def add_item_to_list(item, item_list=None):
if item_list is None:
item_list = []
item_list.append(item)
return item_list

print(add_item_to_list("apple"))
print(add_item_to_list("banana"))

Dengan default ke None, daftar baru dibuat setiap kali fungsi dipanggil. Ini memastikan setiap panggilan ke fungsi dimulai dengan daftar yang bersih, seperti yang diharapkan.

4. Penanganan File yang Salah

Bekerja dengan file di Python cukup mudah. Tetapi ada kesalahan umum yang dapat menyelinap ke dalam kode Anda: tidak menutup file. Mungkin tampak tidak berbahaya, tetapi membiarkan file terbuka dapat menyebabkan kebocoran memori, kerusakan file, atau file terkunci yang tidak dapat diakses oleh program lain.

file = open('data.txt', 'r')
content = file.read()

print(content)
# Lupa menutup file!

Membiarkan file terbuka dapat menyebabkan masalah serius. Bahkan dapat mencegah file dihapus atau dimodifikasi oleh proses lain.

Solusi: Anda harus selalu memastikan untuk menutup file setelah Anda menyelesaikan operasi Anda. Anda dapat melakukannya dengan menggunakan fungsi close().

file = open('data.txt', 'r')
content = file.read()

print(content)
file.close()

Praktik terbaik lainnya adalah menggunakan pernyataan with Python, yang secara otomatis menangani penutupan file untuk Anda.

with open('data.txt', 'r') as file:
content = file.read()
print(content)

Blok with menangani semua pembersihan di balik layar. Segera setelah Anda keluar dari blok, Python menutup file untuk Anda. Ini memungkinkan Anda untuk tidak perlu khawatir menutup file secara manual.

5. Mengimpor Semuanya dari Modul

Sebagai pemula, sangat menggoda untuk hanya menempelkan from module import * di bagian atas skrip Anda. Tetapi seiring pertumbuhan kode Anda, jalan pintas ini menjadi resep bencana.

from math import *
from custom_math import *

print(sqrt(16))

Bagaimana jika math dan custom_math sama-sama mendefinisikan fungsi bernama sqrt()? Mana yang dipanggil? Python tidak memberi tahu Anda. Itu hanya secara diam-diam menimpa yang sebelumnya. Anda bisa menggunakan fungsi yang sama sekali berbeda tanpa menyadarinya. Selain itu, dalam basis kode besar, debugging menjadi mimpi buruk. Anda kehilangan jejak dari mana fungsi atau kelas berasal.

Solusi: Anda harus eksplisit dengan impor Anda.

import math
import custom_math

print(math.sqrt(16))
print(custom_math.sqrt(16))

Atau bahkan seperti ini:

from math import sqrt as m_sqrt
from custom_math import sqrt as c_sqrt

print(m_sqrt(16))
print(c_sqrt(16))

“Eksplisit lebih baik daripada implisit” adalah ide inti dari Zen of Python (lihat juga https://id.wikipedia.org/wiki/Zen_of_Python). Anda selalu tahu apa yang Anda gunakan dan dari mana asalnya.

6. Penanganan Pengecualian (Exception) yang Tepat

Bahkan kode yang paling hati-hati sekalipun dapat mengalami masalah yang tidak terduga. Ini disebut pengecualian (exceptions) di Python. Menanganinya dengan anggunlah yang membuat program Anda tangguh. Namun, banyak pemula mendekati penanganan pengecualian dengan mentalitas “tangkap semua”, menggunakan klausul except yang luas. Ini mungkin membungkam kesalahan untuk saat ini, tetapi membuat kode Anda rapuh, membingungkan, dan sulit untuk di-debug.

try:
   result = 10 / 0
except:
   print("Ada yang salah!")

Ini menangkap segalanya. Bahkan kesalahan yang tidak Anda duga atau ingin tangani. Kesalahan sintaks, interupsi keyboard, kesalahan ketik, impor yang rusak. Python akan menelan semuanya dengan except generik itu. Ini tidak ideal.

Solusi: Jadilah spesifik tentang apa yang Anda tangkap:

try:
   result = 10 / 0
except ZeroDivisionError:
   print("Anda tidak bisa membagi dengan nol!")

Anda hanya menangkap kesalahan yang Anda harapkan. Jika ada hal lain yang salah, Python akan tetap mengangkatnya. Jadi, Anda tidak akan secara diam-diam mengabaikan bug yang sebenarnya. Anda juga dapat menangani beberapa pengecualian dengan cerdas:

try:
   value = int(input("Masukkan angka: "))
   result = 10 / value
except ValueError:
   print("Itu bukan angka yang valid!")
   except ZeroDivisionError:
   print("Anda tidak bisa membagi dengan nol!")

Hindari except: sendirian. Jika Anda harus menangkap semua pengecualian (jarang), gunakan except Exception: dan tetap tangani dengan hati-hati. Dengan menangani pengecualian secara spesifik, kode Anda menjadi lebih mudah diprediksi, lebih mudah di-debug, dan mampu memberikan umpan balik yang lebih berarti.

Terbaru

  • Apple Dikabarkan Bikin iPhone Layar Lengkung 4 Sisi, Niru Xiaomi?
  • Inikah HP Samsung Terawet? Samsung Diam-diam Uji Baterai 20.000 mAh
  • Ini Deretan HP Murah RAM 12 GB yang Bisa Bikin Multitasking Ngebut!
  • Ini Trik Rahasia Dapat Candy Blossom di Grow a Garden, Nggak Cuma dari Event!
  • Siap-siap Boros! Ini Bocoran Skin Starlight Januari 2026 dan Update Seru M7
  • Moto X70 Air Pro Bakal Punya Kamera Periskop Canggih!
  • Ternyata Nggak Semua Aplikasi Bisa QRIS CPM di Alfamart, Ini Penjelasannya!
  • Lagi Order Tiba-tiba Gojek Error? Jangan Panik Dulu, Coba Langkah Praktis Ini!
  • Belum Tahu? Inilah Cara Melihat Kode Verifikasi Email Saya 6 Digit yang Sering Bikin Bingung!
  • Belum Tahu? Ini Cara Dapat Akses Premium Viu & Vidio Gratis Pakai Axis!
  • Belum Tahu? Inilah Fakta Kamera 0,5 di Samsung Galaxy A05s, Jangan Salah Beli!
  • Nggak Perlu Panik! Ini Trik Jitu Mengatasi Preview Pane PDF yang Hilang di Windows 10 & 11
  • Ini Video Cikgu Nisa Viral di TikTok? Awas Jangan Asal Klik Link Nonton!
  • Kok Menu Undang Teman di Melolo Hilang? Gini Cara Mengembalikannya!
  • Apa Itu Putlocker? Ini Pengertian dan Deretan Alternatif Penggantinya
  • Apa Itu Extend Volume? Ini Cara Memperluas Drive C di Windows 11
  • Ini Trik AFK Fish It Roblox Pakai LDCloud, Auto Panen Ikan Tanpa Bikin HP Panas!
  • Apa itu Game Zenless Zone Zero (ZZZ) HoYoVerse? Ini Cara Mainnya
  • Cuma Kurang 1 Rupiah! Misteri Lucky Draw Akulaku Rp300 Ribu, Bisa Cair Nggak Sih?
  • Video Melolo Cuma Layar Hitam? Ini Trik Ampuh Mengatasinya, Pasti Berhasil!
  • Mau Simpan Video Twitter dan TikTok Tanpa Aplikasi? Begini Cara Praktis Pakai VidsSave!
  • Mau Gaji Dolar? Gini Caranya Tembus Kerja di Australia, Jangan Sampai Salah Visa!
  • Belum Tahu? Inilah Fakta MigoReels, Katanya Nonton Drama Bisa Dapat Rp700 Ribu!
  • Apa Itu Event Invite Friends CapCut? Ini Pengertian dan Cara Kerjanya Biar Cuan
  • Apa Itu MJ di FF? Ini Pengertian, Asal-Usul, dan Risiko di Balik Istilah Tersebut
  • Apa Itu Pengertian Penonaktifan SPayLater? Ini Durasi Blokir Akibat Telat Bayar
  • Apa Itu Rasio Gambar Ukuran 1:1 di Canva? Ini Pengertian dan Cara Buatnya
  • Pengiriman Shopee Express Hemat itu Berapa Lama? Ini Pengertian dan Estimasi Sampainya
  • Android 2025: Aplikasi Baru dan Smartphone Impian yang Akan Datang!
  • Apa Itu Google AI Pro Ultra? Ini Pengertian dan Penjelasan Lengkapnya
  • Apa itu Cosmic Desktop: Pengertian dan Cara Pasangnya di Ubuntu 26.04?
  • Apa Itu Auvidea X242? Pengertian Carrier Board Jetson T5000 dengan Dual 10Gbe
  • Elementary OS 8.1 Resmi Rilis: Kini Pakai Wayland Secara Standar!
  • Apa Itu Raspberry Pi Imager? Pengertian dan Pembaruan Versi 2.0.3 yang Wajib Kalian Tahu
  • Performa Maksimal! Ini Cara Manual Update Ubuntu ke Linux Kernel 6.18 LTS
  • Begini Cara Buat Generator Stiker WhatsApp Otomatis Menggunakan Python dan OpenAI GPT-Image-1
  • Inilah Cara Kerja AI Instagram Deteksi Konten Berbahaya dan Spam Secara Otomatis
  • Prompt AI Tahun Baruan di Bundaran HI
  • Prompt AI Pamer iPhone 17 Pro Max Orange
  • Apa itu GPT 5.2 di Microsoft Copilot? Ini Pengertian dan Keunggulannya
  • Apa Itu Paket WhatsApp API Palsu di NPM? Ini Pengertian dan Bahayanya
  • Apa Itu Serangan Spear-Phishing Microsoft 365? Ini Pengertian dan Modusnya
  • Apa Itu Ploutus? Mengenal Ransomware P0ADUS yang Baru Saja Ditindak DOJ
  • Apa itu CVE-2025-68664? Memahami Celah Keamanan LangGrinch pada LangChain
  • Kronologi Kasus Pencurian Data Karyawan Data Breach Korean Air 2025
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ

©2026 emka.web.id | Design: Newspaperly WordPress Theme