Görüyorum ki adblocker kullanıyorsun
"Enter"a basıp içeriğe geçin

Python Kaçış İşaretleri

Programlamayla uğraşıyor ve ilgi duyuyorsanız, kaçış işaretleri ya da kaçış dizilerini bir yerden görmüş ya da duymuşsunuzdur. Bir çok projenin en yoğun geçen saatlerinin ve mesailerinin sonunda bu hataya denk gelme ihtimaliniz çok yüksek, syntax Error!!! Bunun bir çok sebebi olduğu gibi en çok karşılaşılan ve gözden kaçan sorunu kaçış işaretlerinin unutulmasıdır. Özellikle programlamaya yeni başlayan bir çok insan bununla çok sık karşılaşır.

Nedir bu kaçış dizileri ? Pythonda bulunan ve özel anlam taşıyan işaret ya da karakterleri amaçları dışında kullanmak istediğimzde bu kaçış dizileriyle karşılaşırız.

Örnek vermek gerekirse, pythonda bir string tanımlamak istediğimizde bunu üç farklı yolla yapabiliriz. Tek tırnak çift tırnak ya da üç tırnak kullanarak. Şöyle bir senaryo düşünelim, elimizde bir karakter dizini var ve burada tek tırnak kullanmamız gerekiyor .

'Burası Sakarya'dır' 

Bu şekilde kullanıırsak eğer python ilk tırnaktan sonra karakter dizinini oluşturacak ve Sakarya kelimesinin sonundaki tırnak işaretine geldiğinde karakter dizinini bitirecektir. Geriye kalan “dır” ekinin ne ifade ettiğini bilmediği için syntax error verecektir.

Bu ve buna benzer bir çok hatanın önüne geçebilmek için, kaçış dizilerini bilmemiz gerekiyor. Haydi başlayalım 🙂

Ters Taksim (\)

Bu konuları araştırıp bu sayfaya geldiğinize göre pythonda string tanımlamalarını bildiğinizi düşünüyorum. String tanımlarken yukarıda da belirttiğim gibi üç farklı yöntemi kullanabiliriz. Yukarıda verdiğim örnekten devam etmek istiyorum. Şöyle bir string tanımladığınızda:

 "Burası Sakarya"dır" 
String tanımlarken, syntax error hatası

hata alacağımızı biliyoruz. String tanımlamanın üç farklı yolu olduğunu söylemiştik, o zaman şöyle bir string tanımlaması yapamaz mıyız ?

"Burası Sakarya'dır" 

Yapabiliriz ve herhangibir syntax error hatası ile karşlılaşmayız.

Çift ile string tanımlayıp, tek tırnak işareti kullanmak

Hatta şöyle bir tanımlama bile yapabilirz:

"""Burası Sakarya"dır"""

Bu tanımlamayla da herhangi bir hata ile karşılaşmayız fakat mecburi olarak tek tırnak, çift tırnak ya da üç tırnak ile bir string tanımlamak zorunda kaldığımız anlarda, yardımımıza ters taksim işareti koşmaktadır 🙂

Bunun için tırnak işaretinden önce ters taksim kullanarak pythona, bu tırnak işareti ile string bitmiyor, daha devamı var mesajı veriyor. Ve python bunu gördüğünde çalışmasına devam edip stringi bitirecek olan ikinci bir tırnak işaretini arıyor. Tırnak işaretini bulduğunda string tanımlamasını bitirmiş oluyor. Hemen aynı örnek üzerinden bir gösterim yapalım

'Burası Sakarya\'dır' 
Tek tırnak ile ters taksim işareti kullanımı

Kodu bu şekilde yazdığımızda, herhangi bir hata ile karşılaşmayacağız.

Aynı kod çift tırnak ve üç tırnak içinde geçerlidir.

Çift tırnak ile ters taksim işareti kullanımı

İyi güzel de buna nerede ihtiyacımız olacak ? Şöyle bir senaryo düşünelim, kullanıcıya bir mesaj göndermek istiyorsunuz, ters taksim işaretini kullanabilirsiniz. Bir metin dosyası içinden bir karakter dizini okudunuz ve bu karakter dizini üzerinde işlem yapacaksınız fakat tek tırnaklar içinde yazılmış ve buna müdahale edemiyorsunuz bu durumda aldığınız karakter dizisini kullanmak isterseniz python hata verecektir. Bunu düzenleyip tırnak işaretinden önce ters taksim kullanabilirsiniz.

Satır Başı (\n)

\n karakter dizisi, pythonda bir alt satıra geçmeye yarayan özel bir karakterdir. Bu özel karakteri uzun satırlı metinler arasında istediğimiz anda alt satıra geçip programın işleyişine devam etmesini sağlamak için kullanırız.

Fakat şöyle bir durum var, bu özel karakter bir tanımlama içinde geçiyorsa ve bizde bu tanımlamayı kullanmak istiyorsak hiç beklenmedik çıktılara sebep olabilir. Bu yüzden özellikle dikkat edilmesi gereken konulardan biridir.

Şöyle bir senaryo düşünelim, bilgisayarımızda bulunan bir dosyasının yolunu ekrana yazdıralım, ama bu dosya yolunda ters taksim işaretinin yanına “n” karakteri gelirse, python için özel başka bir karakter dizisini istemsizce kullanmış olacağız. Böylece python bizim istediğimiz çıktıyı değil, o anda hangi özel karakteri kullanıyorsak onun işlevini yerine getirecektir. Hemen bir örnek yapalım:

'C:\nabız\hastalar.txt'

Böyle bir tanımlama yaptığımızda python \n karakterinin olduğu kısma (\nabız) gelince bir alt satıra geçer ve işleyişine devam eder. Aslında bizim yapmak istediğimiz olay, bilgisayarımızdaki bir dosyanın yolunu ekrana yazdırmaktı.

İşte bu durumda \n karakter dizisinin özel bir anlama geldiğini bilmiyorsak, yazdığımız uygulamaların beklenmedik sonuçlar vermesi kaçınılmaz olacaktır.

Bunun içinde bir senaryo düşünelim. Mesela bilgisayarınızdaki bir dosyayı open() fonksiyonu ile açmak istediniz ve dosya yolu olarak yukarda örnek verdiğim gibi bir isimlendirmeye sahipsiniz. Bu durumda yazdığınız program çalışmayacaktır. Ve çökmesine sebep olacaktır.

Bunun önüne geçebilmek için, dizin içindeki ters taksim işaretlerini çift kullanabilirsiniz. Böylece herhangi bir hataya sebebiyet vermemiş olacaktır.

Sekme (\t)

Tıpkı “n” karakterinde olduğu gibi, ters taksim işareti “t” harfinden önce gelirse, python için tab(sekme) anlamında bir özel karakter ortaya çıkmış olur.

Örnek vermek gerekirse, bir metin içinde bir sekmelik boşluk bırakmak için \t karakter dizinini kullanırız.

\t kaçış işareti kullanımı

Ekrana, bir kere tab sekmesine basılmış gibi( dört adet boşluk) alan oluşturur

Bu kaçış işaretini bilerek kullandığımızda işimize yarıyor, fakat gözden kaçırdığımızda yazdığımız uygulamanın işleyişini olumsuz yönde etkiliyor.

\n özel karakter dizisinde kullandığımız örneği kullanarak devam edelim.

'C:\nabız\tansiyon\hastalar.txt'

şeklinde bir tanımla yaptığımızda şöyle bir sonuç ile karşılaşırız.

\n özel karakter dizisinde olduğu gibi, python işleyişine soldan sağa doğru kodları okuyarak ilerliyor, \n karakter dizisinin aslında yeni bir satıra geçiş yapması için değil farklı bir amaç için kullandığımızı bildirmek üzere ters taksim işaretini iki kez yazıyoruz, kodları okumaya devam ediyor, \t işaretini gördüğünde bunun yeni bir sekme için yazıldığını yorumlayıp bir sekme boşluk bırakarak geri kalan yazıyı aynen ekrana basıyor.

Bunun önüne geçmek için aynı \n kaçış dizininde kullandığımız gibi çift ters taksim kullanabiliriz. Böylece pythona bunun aslında bir sekme işareti olmadığını bildiririz

Zil Sesi (\a)

Ters taksim işaretiyle başka bir harfin yanyana gelmesiyle oluşan özel bir karakter dizini de “a” harfidir. Bu iki karakter yan yana geldiğinde bip sesi çıkmasına sebep olur.

Bunu denemek isteyebilirsiniz. Bu linux sistemlerde çalışmamaktadır. Her windows sisteminde de çalışmamaktadır. Bazı sürümlerde böyle bir etkiye sebep olmaktadır.

Stringler ile çalışırken bunu da göz önünde bulundurmayı unutmayın.

Aynı Satır Başı (\r)

Alfabemizde kritik bir yeri bulunan ve sıkça cümle içinde kullandığımız bu harf ile ters taksimin yan yana gelmesiyle satır başı kaçış dizisi oluşur.

Bu kaçış dizisi çalıştığı zaman, bulunduğu yerden önce yazılan tüm karakterin üzerine, bulunduğu yerden sonraki karakterleri yazar. Hemen bir örnek yapalım

"Python\röğreniyorum"

Python soldan başlayarak yazılan kodu yorumlamaya başlıyor, “python” yazısından sonra satır başına geri dönüyor ve “öğreniyorum” kelimesini yazıyor. Bir örnek daha yapalım.

"Öğreniyorum\rpython"
\r kaçış dizini örnek

Python soldan başlayarak tekrar yorumluyor, “\r” kaçız dizinine geldiğinde, kaçış dizininden sonraki kelime geldiğinde bunu olduğu gibi satırın başına yazıyor ve ilk kelimeden geriye kalan fazla karakterleri buna ekliyor. “Öğreniyorum” kelimesi 11 karakterden oluşur, “python” kelimesi 6 karakterden oluşur bu yüzden “öğreniyorum” kelimesinin altı karakteri yerine “python” yazıldı ve geriye kalan 4 karakter olduğumu gibi “python” kelimesine eklendi. Çıktı olarak bu garip kelime ile karşılaştık “pythonyorum” 🙂

İmleç Kaydırma (\b)

Bu kaçış dizisinin yaptığı görev, imleci bir karakter sola kaydırmaktır. Hemen örnek yapalım

"Kenan yaman"

Normal şartlarda “Kenan” ve “yaman” kelimeleri arasında bir boşluk ve boşluktan sonra “\b” kaçış dizinini kullandım. Çıkan sonuç iki kelimenin bitişik yazılmış hali. Bu kod yorumlanırken kaçış dizinine geldiğinde imleci bir karakter sola kaydırdı ve ekrana bu şekilde bir çıktı verdi.

Aynı örneği boşluk olmadan yazalım.

Bu sefer, kaçış dizinine geldiğinde imleç bir karakter sola kaydı ve “n” harfinin üzerine yazdı. Yani bir karakter silindi.

Bu kaçış dizinini bir çok kez yan yana yazarak istediğiniz kadar imleci sola kaydırabilirsiniz.

Küçük Unicode (\u)

Tehlikeli olan bir kaçış dizisine geldik. Öncelikle unicode nedir bunun tanımını yapalım

Unicode: Bilgisayar ekranında gördüğünüz tüm karakterlerin(harf, sayı, rakam, özel karakterler) özel numaralar ile benzersiz bir şekilde tanımlandığı bir sistemdir. Şuna benzetebiiriz, internet çıkışı olan her cihazın benzersiz bir mac adresi vardır. Bu sistemde onun gibi benzersiz ve her karakter için özel olarak üretilmiş olan kodlar.

Latin harflari için şu linke bakabilir, diğer harfler ve semboller için şu linke bakabilirsiniz

Python, ters taksim ve “u” karakterlerini yan yana gördüğün bir unicode karakter arar. Bulamadığında hata verir. Yazdığımız uygulamalarda bunu gözden kaçırırsak programın çökmesine sebep olabiliriz. Bir örnek yapalım.

Dosya konumu: C:\users\belgeler\python.pdf

Ekrana bu şekilde bir çıktı vermek istediğimizde python yorumlayıcısı soldan başlayarak kodu okur ve kaçış dizisi geldiğinde, sonraki karakterler içinde bir unicode arar. Bulamadığı takdirde hataya sebep olur.

Diğer kaçış dizilerinde olduğu gibi bu sorununda üstesinden gelmek için ters taksim işaretini çiftleyebilirsiniz.

Büyük Unicode (\U)

Büyük harfle yazılan kaçış dizisi de aynı küçük harfle yazılan diğer kaçış dizisiyle aynı anlamı taşır. Aralarındaki tek fark, küçük unicode 4 karakterlik bir bir alan tutarken, büyük harf ile yazılan unicode sekiz karakterlik bir alan tutar.

“ı” karakterini yazmak için küçük unicode ile şöyle bir kod yazmamız gerekir.

'\u0131'

Büyük unicode da aynı karakteri yazmak için şunu kullanırız.

'\U00000131'

Uzun Ad (\N)

Unicode ile iligili bir başka kaçış dizisidir “N” harfi ile yazılan kaçış dizisidir.

Unicode sisteminde benzersiz bir kod olduğu gibi benzersiz bir uzun “ad” da kullanılır. “a” harfi için kullanılan benzersiz uzun ad şu şekildedir “LATIN SMALL LETTER A”

Yukarda verdiğim link üzerinden tüm harflerin uzun adlarına bakabilirsiniz.

Diğer unicode kaçış dizilerinde olduğu gibi, python bu kaçış dizinine geldiğinde herhangi bir uzun ad unicode tanımlaması görmezse, bir karşılık bulamadığı için hata verecektir.

Onaltılı Karakter (\x)

Diğer kaçış dizilerinde olduğu gibi, ters taksim ile “x” harfi bir araya geldiğinde onaltılı (hexadecimal) sayma sistemi için bir kaçış dizisi üretir.

Onaltılı sayma sisteminde, unicode da olduğu gibi her harfin ve sayının bir karşılığı vardır. Bunu şöyle bir kod ile görebiliriz.

\x kaçış dizisi örnek

“k” harfi için onaltılı sistemin “\x6b” kullanılır. Tüm karakter ve sembollere bakmak için şu siteyi kullanabilirsiniz.


Son olarak bu kaçış dizilerinden daha pratik bir şekilde nasıl kurtulabileceğimizi göstermek istiyorum.

Eğer bir string içinde bu şekilde bir kaçış dizisi denk gelirse, stringin başına “r” harfi koyarsınız python bu kaçış dizilerini görmezden gelecektir. Bir örnek yapalım.

 print(r'C:\nabız\tansiyon\hastalar.txt')

Normal şartlarda yukarıdaki gibi bir örnek yapmak istediğimizde, \n ve \t kaçış dizilerini istemsizce kullanmış olacaktık fakat tırnak işaretinden önce kullandığımız tek bir “r” harfi ile bu kaçış dizilerini etkisizleştirmiş olduk.


Kaçış dizilerini iyi kavramamız yazacağımız programların sağlığı açısından önemlidir. Bu karakterlerin nerede ve ne zaman karşımıza çıkacağını asla tahmin edemezsiniz.

Kaçış dizilerinin sonuna geldik. Hatasız ve problemsiz kod yazmanız dileğiyle…. 🙂

İlk Yorumu Siz Yapın

    Bir Cevap Yazın