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

Perbandingan berikut memperlihatkan bedanya secara langsung pada dictionary response API yang sama:

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

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

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

text
{'data': {'pengguna': [{'hobi': ['fotografi',
                                 'jogging'],
                        'nama': 'Budi'},
                       {'hobi': ['memasak'],
                        'nama': 'Siti'}]},
 'status': 'sukses'}
{'data': {...}, 'status': 'sukses'}

Mari kita bedah peran kedua parameter:

  1. width=40: pprint mencoba menjaga setiap baris di bawah 40 karakter; list ['fotografi', 'jogging'] yang tidak muat dipenggal menjadi dua baris.
  2. 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:

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

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

SituasiAlat yang tepat
Melihat isi JSON/dict bersarang saat debuggingpprint.pprint
Menyematkan struktur data ke pesan logpformat + module logging
Data sangat dalam, hanya butuh kerangkapprint(..., depth=2)
Keluaran untuk dibaca pengguna akhirjson.dumps(..., indent=2) atau template

Aturan praktisnya sederhana: begitu print() memaksa kita menggulir layar ke samping untuk membaca satu nilai, saatnya beralih ke pprint.