16. Ek Bölüm

16.1. Etkileşimli Mod

16.1.1. Hata İşleme

Bir hata oluştuğunda, yorumlayıcı bir hata iletisi ve yığın izlemesi yazdırır. Etkileşimli modda, daha sonra birincil istemi döndürür; bir dosyadan veri giriş gercekleştiğinde, yığın izlemeyi yazdırdıktan sonra sıfır olmayan bir çıkış koduyla çıkar. (try deyimindeki except yan tümcesi tarafından işlenen özel durumlar bu bağlamda hata değildir.) Bazı hatalar koşulsuz olarak ölümcüldür ve sıfır olmayan bir çıkış koduyla çıkışa neden olur; bu, iç tutarsızlıklar ve belleğin tükendiğine ilişkin bazı durumlar için geçerlidir. Tüm hata iletileri standart hata akışına yazılır; yürütülen komutlardan normal çıktı standart çıktıya yazılır.

Yarıda kesme karakterinin (genellikle Control-C veya Delete) birincil veya ikincil istemine yazılması girişi iptal eder ve birincil istemi döndürür. 1 Bir komut yürütülürken bir yarıda kesme karakteri yazmak KeyboardInterrupt özel durumuna neden olur ve bu özel durum try deyimi tarafından işlenebilir.

16.1.2. Yürütülebilir Python Komut Dosyaları

BSD türü Unix sistemlerinde Python komut dosyaları, :: satırı koyarak kabuk komut dosyaları gibi doğrudan yürütülebilir hale getirilebilir:

#!/usr/bin/env python3.5

(yorumlayıcının kullanıcının PATH) komut dosyasının başında olduğunu ve dosyaya yürütülebilir bir mod verdiğini varsayarsak. #! dosyanın ilk iki karakteri olmalıdır. Bazı platformlarda, bu ilk satırın Windows ('\r\n') satır sonuyla değil, Unix stili bir satır sonuyla (\n') bitmesi gerekir. Python’da yorum başlatmak için karma veya pound karakteri olan '#' kullanıldığını unutmayın.

Komut dosyasına chmod komutu kullanılarak yürütülebilir mod veya izin verilebilir.

$ chmod +x myscript.py

Windows sistemlerinde, “yürütülebilir mod” kavramı yoktur. Python yükleyicisi otomatik olarak .py dosyalarını python.exe ile ilişkilendirir, böylece python dosyasına çift tıklama komut dosyası olarak çalıştırılır. Uzantı .pyw ‘de olabilir, bu durumda normalde görünen konsol penceresi bastırılır.

16.1.3. Etkileşimli Başlangıç Dosyası

Python’u etkileşimli olarak kullandığınızda, yorumlayıcı her başlatıldığında bazı standart komutların yürütülmesi genellikle kullanışlıdır. Bunu, başlatma komutlarınızı içeren bir dosyanın adına PYTHONSTARTUP adlı bir ortam değişkeni ayarlayarak yapabilirsiniz. Bu, Unix kabuklarının .profile özelliğine benzer.

Bu dosya Python komutları bir komut dosyasından okuduğunda değil, yalnızca etkileşimli oturumlarda okunur. Python komutları bir komut dosyasından okuduğunda, /dev/tty komutların açık kaynağı olarak verildiğinde değil (aksi takdirde etkileşimli bir oturum gibi davranır). Etkileşimli komutların yürütüldüğü aynı ad alanında yürütülür, böylece tanımladığı veya aldığı nesneler etkileşimli oturumda nitelik olmadan kullanılabilir. Bu dosyadaki sys.ps1 ve sys.ps2 istemlerini de değiştirebilirsiniz.

Geçerli dizinden ek bir başlangıç dosyası okumak istiyorsanız, bunu genel başlangıç dosyasında if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read() gibi bir kod kullanarak programlayabilirsiniz. Başlangıç dosyasını bir komut dosyasında kullanmak istiyorsanız, bunu komut dosyasında açıkça yapmalısınız:

import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    with open(filename) as fobj:
        startup_file = fobj.read()
    exec(startup_file)

16.1.4. Özelliştirme Modülleri

Python özelleştirmenize izin vermek için iki kanca sağlar: sitecustomize ve usercustomize. Nasıl çalıştığını görmek için önce kullanıcı sitesi paketleri dizininizin konumunu bulmanız gerekir. Python’ı başlatın ve şu kodu çalıştırın:

>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.5/site-packages'

Artık bu dizinde usercustomize.py adlı bir dosya oluşturabilir ve içine istediğiniz her şeyi koyabilirsiniz. Otomatik içe aktarmayı devre dışı bırakmak için -s seçeneğiyle başlatılmadıkça Python’un her çağrısını etkiler.

sitecustomize aynı şekilde çalışır, ancak genellikle genel site paketleri dizinindeki bilgisayarın yöneticisi tarafından oluşturulur ve usercustomize ‘dan önce alınır. Daha fazla ayrıntı için site modülünün belgelerine bakın.

Dipnotlar

1

GNU Readline paketiyle ilgili bir sorun bunu engelleyebilir.