Debugging data bersarang dengan print() sering berakhir di satu baris panjang ratusan karakter: response API, dictionary konfigurasi, list of records. Mata kita kehilangan struktur di dalam dinding teks tersebut. Module pprint (pretty printer) mencetak struktur data Python dalam bentuk bertingkat dengan indentasi dan pemenggalan baris yang masuk akal — kelanjutan alami dari teknik pada Chapter Debugging dengan print().
print vs pprint #
Perbandingan berikut memperlihatkan bedanya secara langsung pada dictionary response API yang sama:
from pprint import pprint
respons = {
"status": "sukses",
"data": {
"pengguna": [
{"nama": "Budi", "hobi": ["fotografi", "jogging"]},
{"nama": "Siti", "hobi": ["memasak"]},
]
},
}
print(respons)
pprint(respons)Output yang Dihasilkan:
{'status': 'sukses', 'data': {'pengguna': [{'nama': 'Budi', 'hobi': ['fotografi', 'jogging']}, {'nama': 'Siti', 'hobi': ['memasak']}]}}
{'data': {'pengguna': [{'hobi': ['fotografi', 'jogging'], 'nama': 'Budi'},
{'hobi': ['memasak'], 'nama': 'Siti'}]},
'status': 'sukses'}Baris pertama adalah keluaran print(): satu baris horizontal yang sulit dibaca. Baris kedua dan ketiga adalah keluaran pprint(): setiap level bersarang mendapat baris sendiri dengan indentasi yang sejajar terhadap tanda kurung pembukanya.
Mengatur width dan depth #
Dua parameter utama mengendalikan seberapa lebar dan seberapa dalam struktur dicetak. Kita pakai dictionary respons yang sama seperti contoh sebelumnya:
from pprint import pprint
respons = {
"status": "sukses",
"data": {
"pengguna": [
{"nama": "Budi", "hobi": ["fotografi", "jogging"]},
{"nama": "Siti", "hobi": ["memasak"]},
]
},
}
pprint(respons, width=40)
pprint(respons, depth=1)Output yang Dihasilkan:
{'data': {'pengguna': [{'hobi': ['fotografi',
'jogging'],
'nama': 'Budi'},
{'hobi': ['memasak'],
'nama': 'Siti'}]},
'status': 'sukses'}
{'data': {...}, 'status': 'sukses'}Mari kita bedah peran kedua parameter:
width=40:pprintmencoba menjaga setiap baris di bawah 40 karakter; list['fotografi', 'jogging']yang tidak muat dipenggal menjadi dua baris.depth=1: hanya level pertama yang ditampilkan utuh; level yang lebih dalam digantikan{...}. Parameter ini menyelamatkan kita saat mencetak data yang bersarang sepuluh level — cukup tunjukkan kerangka luarnya.
pformat dan saferepr #
Function pformat() mengembalikan string, sehingga bisa dirangkai dengan pesan lain sebelum dikirim ke module logging — pola yang serasi dengan materi Chapter Module logging. Module ini juga menyediakan saferepr(), versi repr() yang aman untuk struktur yang menunjuk dirinya sendiri (misalnya dictionary berisi referensi ke dirinya); mulai Python 3.13 function ini diperkuat agar tidak pernah menimbulkan exception dan memotong keluaran yang terlalu panjang. Berikut contoh pformat() memakai data yang sama:
from pprint import pformat
respons = {
"status": "sukses",
"data": {
"pengguna": [
{"nama": "Budi", "hobi": ["fotografi", "jogging"]},
{"nama": "Siti", "hobi": ["memasak"]},
]
},
}
log_line = "respons API: " + pformat(respons, width=40)
print(log_line)Output yang Dihasilkan:
respons API: {'data': {'pengguna': [{'hobi': ['fotografi',
'jogging'],
'nama': 'Budi'},
{'hobi': ['memasak'],
'nama': 'Siti'}]},
'status': 'sukses'}Function pformat() mengembalikan string, sehingga bisa dirangkai dengan pesan lain sebelum dikirim ke module logging — pola yang serasi dengan materi Chapter Module logging. Module ini juga menyediakan saferepr(), versi repr() yang aman untuk struktur yang menunjuk dirinya sendiri (misalnya dictionary berisi referensi ke dirinya); mulai Python 3.13 function ini diperkuat agar tidak pernah menimbulkan exception dan memotong keluaran yang terlalu panjang.
Kapan Memakai pprint #
| Situasi | Alat yang tepat |
|---|---|
| Melihat isi JSON/dict bersarang saat debugging | pprint.pprint |
| Menyematkan struktur data ke pesan log | pformat + module logging |
| Data sangat dalam, hanya butuh kerangka | pprint(..., depth=2) |
| Keluaran untuk dibaca pengguna akhir | json.dumps(..., indent=2) atau template |
Aturan praktisnya sederhana: begitu print() memaksa kita menggulir layar ke samping untuk membaca satu nilai, saatnya beralih ke pprint.