SyntaxError: unterminated string literal hatasını çözmek için metni başlatan tırnağı bul ve uygun kapanış tırnağını ekle. Bu hata, tek veya çift tırnakla açılan bir metin aynı satırda kapatılmadığında ortaya çıkabilir. Üç tırnakla açılan metinler ise birden fazla satıra yayılabilir ve yine üç tırnakla kapatılır.
Hata mesajındaki satır ve işaret nasıl okunur?

Hata mesajındaki satır numarası ve ^ işareti, Python'ın sorunu belirlediği yeri bulmana yardımcı olur. Bu yerin çevresindeki tırnakları ve gerekirse önceki satırları da kontrol et.
Python'da string, harf, rakam ve noktalama işareti gibi karakterlerden oluşan metin verisidir. Örneğin "Merhaba" bir string değeridir ve başındaki çift tırnak, sonundaki çift tırnakla kapanır.
Aşağıdaki satırda metin çift tırnakla başlıyor ancak kapanış tırnağı eksik bırakılıyor:
print("Merhaba)
Python bu kodu çalıştırmaya hazırlanırken metnin sonunu bulamadığı için SyntaxError verir; ekrana Merhaba yazdırılmaz. Kapanış parantezinden önce çift tırnağı eklersen kod çalışır:
print("Merhaba")
Beklenen çıktı:
Merhaba
Hata mesajında detected at line 1 gibi bir ifade görürsen bu, sorunun belirtilen satırda tespit edildiğini söyler. ^ işareti de yorumlayıcının belirlediği konumu gösterir; asıl neden işaretin yakınındaki önceki karakterlerde veya önceki satırlarda bulunabilir.
Benzer bir durumda eski Python sürümlerinde EOL while scanning string literal mesajıyla da karşılaşabilirsin. Bu mesajı gördüğünde de metni açan tırnağın uygun biçimde kapanıp kapanmadığını incele.
Metnin içindeki tırnak işareti nasıl yazılır?
Metnin içinde dış tırnakla aynı türde bir tırnak kullanacaksan onu ters bölüyle kaçırabilir veya metnin dışındaki tırnak türünü değiştirebilirsin.
Şu satırda metin tek tırnakla açılır. Python, Ali sözcüğünden sonraki kesme işaretini metnin sonu olarak algılar ve satırın devamı sözdizimi hatasına yol açar:
print('Ali'nin notu')
Kaçış karakteri, metin içinde ardından gelen karakterin özel biçimde yorumlanmasını sağlayan ters bölü işaretidir (). Kesme işaretinin önüne ters bölü koyarak onun metni sonlandırmak yerine metnin parçası olmasını sağlayabilirsin:
print('Ali'nin notu')
Beklenen çıktı şöyledir; ters bölü çıktıda görünmez:
Ali'nin notu
Diğer seçenek, metni dışarıdan çift tırnakla çevirmektir. Böylece içerideki tek tırnağı ters bölü kullanmadan yazabilirsin:
print("Ali'nin notu")
Bu kodun çıktısı da aynıdır:
Ali'nin notu
Bir metin düzenleyiciden veya mesajlaşma uygulamasından kod kopyaladığında tırnakların biçimine de bak. “ ve ” gibi kıvrık tırnaklar, Python kodunda metni çevrelemek için kullanılan düz " ve ' işaretlerinin yerine geçmez; gerektiğinde bunları klavyenden düz tırnaklarla değiştir.
Windows dosya yolunda ters bölü nasıl kullanılır?

Windows dosya yolunu Python kodunda yazarken ters bölülerin nasıl yorumlandığına dikkat etmelisin. String, Python'da metin tutmak için kullanılan veri türüdür. Kaçış karakteri olan ters bölü, kendisinden sonraki karakterle birlikte özel anlam taşıyan bir dizi oluşturabilir.
Örneğin aşağıdaki yol, tırnakları kapalı olmasına rağmen hata üretir:
yol = "C:UsersAli"
Python, U ile başlayan kısmı bir Unicode kaçış dizisi olarak yorumlamaya çalışır. Bu dizinin beklenen biçimde tamamlanmaması bir SyntaxError oluşturur; sorun kapanmamış tırnaktan farklıdır.
Her ters bölüyü çift yazarak yolu düzeltebilirsin:
yol = "C:\Users\Ali"
print(yol)
Beklenen çıktı:
C:UsersAli
Bir başka seçenek raw string kullanmaktır. Raw string, başına r konan ve içindeki ters bölüleri çoğunlukla olduğu gibi ele alan metin yazımıdır:
yol = r"C:UsersAli"
print(yol)
Bu kod da C:UsersAli çıktısını üretir.
Kapanış tırnağından hemen önce tek ters bölü bulunması ise farklı bir soruna yol açar:
yol = "C:\Users\Ali"
Son ters bölü tırnağı kaçırdığı için Python metnin kapanışını bulamaz ve unterminated string literal hatası verir. Raw string de tek bir ters bölüyle bitirilemez.
Yolun sonunda ters bölü gerekiyorsa onu ayrı bir normal string olarak ekleyebilirsin:
yol = r"C:UsersAli" + "\"
print(yol)
Beklenen çıktı:
C:UsersAli
Çok satırlı metinler ve hatayı bulma adımları
Bir metni birden fazla satıra yaymak için üç çift tırnak veya üç tek tırnak kullanabilirsin. Açılışta hangi üçlüyü seçtiysen metni aynı üçlüyle kapatmalısın.
mesaj = """Merhaba!
Python öğreniyorum."""
print(mesaj)
Beklenen çıktı:
Merhaba!
Python öğreniyorum.
Kapanıştaki tırnak üçlüsü eksikse Python metnin sonunu bulamaz ve unterminated triple-quoted string literal mesajını gösterebilir:
mesaj = """Merhaba!
Python öğreniyorum.
Aşağıdaki programda ise kullanıcıdan alınan ad, bir selamlama metniyle birleştirilir:
ad = input("Adın: ")
print(f"Merhaba, {ad}!")
Örneğin Deniz girildiğinde ekranda şunlar görünür:
Adın: Deniz
Merhaba, Deniz!
Python konularındaki bilgini yoklamak için Python bilgi testini kullanabilirsin.
Hatanın kaynağını ararken şu adımları izle:
- Hata mesajında gösterilen satırı ve yakınındaki satırları incele.
- Açılış ve kapanışta düz tırnak işaretlerinin eşleştiğinden emin ol. Üç tırnak kullandıysan kapanışta da üç tırnak ara.
- Metnin içindeki kesme işaretlerinin string'i erken kapatıp kapatmadığını kontrol et.
- Kapanış tırnağından hemen önce ters bölü varsa tırnağın kaçırılıp kaçırılmadığına bak.
Bu kontroller, tırnakların ve ters bölülerin kodda hangi görevi üstlendiğini görmene yardımcı olur.