Chapter sebelumnya menunjukkan harga yang harus dibayar saat menulis teks penuh backslash: setiap backslash harus digandakan menjadi \\ agar tidak tertelan sebagai escape sequence. Dua tempat backslash paling banyak muncul adalah path Windows (C:\Users\Budi) dan pola regular expression (\d, \w, \s). Untuk keduanya, Python menyediakan raw string: cukup tambahkan huruf r sebelum tanda kutip, dan interpreter berhenti menerjemahkan escape sequence di dalam string tersebut.

Perbandingan String Biasa dan Raw String #

Raw string ditulis dengan prefix r (huruf kecil atau besar, keduanya setara): r"..." atau r'...'. Interpreter Python memperlakukan setiap backslash di dalam raw string sebagai karakter backslash biasa, bukan awal escape sequence:

python
path_biasa = "C:\\Users\\Budi\\dokumen"
path_raw = r"C:\Users\Budi\dokumen"

print(path_biasa)
print(path_raw)
print(path_biasa == path_raw)
print(len(path_biasa), len(path_raw))

Output yang Dihasilkan:

text
C:\Users\Budi\dokumen
C:\Users\Budi\dokumen
True
21 21

Mari kita bedah hasilnya:

  1. Baris 1 ("C:\\Users\\Budi\\dokumen"): string biasa menuntut setiap backslash ditulis dua kali; hasil akhirnya adalah teks dengan tiga backslash tunggal.
  2. Baris 2 (r"C:\Users\Budi\dokumen"): raw string membaca karakter apa adanya — satu backslash di source code berarti satu backslash di data.
  3. Baris 4 (path_biasa == path_raw): perbandingan menghasilkan True; keduanya adalah string yang sama persis, prefix r hanya mengubah cara penulisan di source code, bukan tipe datanya.
  4. Baris 5 (len(...)): panjang keduanya 21 karakter, menegaskan tidak ada karakter tersembunyi yang berbeda.

Kebutuhan Terbesar: Pola Regex #

Kebutuhan raw string paling nyata muncul di pola regular expression. Pola seperti “satu digit atau lebih” ditulis \d+; pada string biasa, penulisan "\d+" memicu peringatan SyntaxWarning: invalid escape sequence '\d' karena \d bukan escape sequence yang Python kenali. Raw string menghilangkan masalah ini sejak dari akarnya:

python
pola = r"\d+"

print(pola)
print(len(pola))

Output yang Dihasilkan:

text
\d+
3

String pola menyimpan tepat tiga karakter — \, d, + — persis yang dibutuhkan module re sebagai pola pencarian digit. Tanpa prefix r, \d berpotensi diterjemahkan berbeda dan membuat pola rusak diam-diam. Penggunaan penuh pola regex ini dibahas pada Chapter Pengenalan Regular Expressions di ujung section ini.

Batasan Raw String #

Raw string bukan tongkat ajaib yang menetralkan semua aturan string. Dua batasan berikut penting diingat.

Pertama, raw string tidak boleh berakhir dengan backslash ganjil. Di mata parser, backslash di dalam raw string tetap dianggap meng-escape tanda kutip yang mengikutinya — backslash tersebut ikut tersimpan dalam data, tetapi parser tetap membaca pasangan \" sebagai kutip yang di-escape, bukan penutup string. Akibatnya, backslash pada posisi terakhir “menelan” tanda kutip penutup, dan parser tidak pernah menemukan akhir string yang sah:

python
>>> path = r"C:\folder\"
  File "<stdin>", line 1
    path = r"C:\folder\"
           ^
SyntaxError: unterminated string literal (detected at line 1)

Interpreter Python melaporkan SyntaxError: unterminated string literal karena parser tidak menemukan tanda kutip penutup yang sah. Solusinya sederhana: tulis backslash terpisah, misalnya path = r"C:\folder" + "\\", atau letakkan backslash di luar raw string.

Kedua, raw string tidak membatalkan aturan kutip pembungkus: string r"teks" tetap tidak boleh memuat tanda kutip ganda tanpa perlakuan khusus, sama seperti string biasa.

Kombinasi rf-string #

Prefix boleh digabungkan: rf"..." (atau fr"...") menggabungkan raw string dengan f-string. Pola ini cocok saat pola regex atau path perlu disisipi nilai variabel sekaligus menjaga backslash tetap utuh:

python
user = "budi"

path = rf"C:\Users\{user}\dokumen"
print(path)

Output yang Dihasilkan:

text
C:\Users\budi\dokumen

Kurung kurawal tetap dievaluasi sebagai ekspresi f-string — nilai variabel user menggantikan {user} — sementara seluruh backslash diperlakukan mentah-mentah oleh prefix r.

Dengan escape sequence dan raw string, kita kini mengendalikan karakter hingga ke tanda kutip dan backslash. Bab berikutnya menuruni satu tingkat lebih dalam: bagaimana Python menyimpan karakter sebagai angka Unicode dan mengubahnya menjadi bytes.