Python çıkış komutları - neden bu kadar çok ve her biri ne zaman kullanılmalı?
Görünüşe göre python, betik yürütmeyi durdurmak için birçok farklı komutu destekliyor.
Bulduğum seçenekler şunlardır: quit(),
exit(),
sys.exit(),
os._exit()`
Kaçırdığım bir şey var mı? Aralarındaki fark nedir? Her birini ne zaman kullanırdınız?
429
3
Onlar hakkında biraz bilgi vereyim:
quit()
perde arkasındaSystemExit
istisnasını yükseltir.Ayrıca, yazdırırsanız bir mesaj verecektir:
Bu işlev Python bilmeyen kişilere yardımcı olmak için eklenmiştir. Sonuçta, yeni başlayan birinin Python'dan çıkmak için deneyeceği en olası şeylerden biri
quit
yazmaktır.Bununla birlikte,
quit
üretim kodunda kullanılmamalıdır. Bunun nedeni, yalnızcasite
modülü yüklüyse çalışmasıdır. Bunun yerine, bu fonksiyon sadece yorumlayıcıda kullanılmalıdır.exit()
quit
için bir takma addır (ya da tam tersi). Python'u daha kullanıcı dostu yapmak için birlikte var olurlar.Ayrıca, basıldığında bir mesaj da verir:
Ancak,
quit
gibi,exit
de üretim kodunda kullanılmak için kötü kabul edilir ve yorumlayıcıda kullanılmak üzere ayrılmalıdır. Bunun nedeni, onun dasite
modülüne dayanmasıdır.sys.exit()
arka plandaSystemExit
istisnasını yükseltir. Bu, bu açıdanquit
veexit
ile aynı olduğu anlamına gelir.Ancak bu ikisinin aksine,
sys.exit
in üretim kodunda kullanılmasının iyi olduğu düşünülmektedir. Bunun nedenisys
modülünün her zaman orada olacak olmasıdır.os._exit()
programdan temizleme işleyicilerini çağırmadan, stdio tamponlarını yıkamadan vs çıkar. Bu nedenle, standart bir çıkış yolu değildir ve yalnızca özel durumlarda kullanılmalıdır. Bunlardan en yaygın olanıos.fork
tarafından oluşturulan çocuk süreç(ler)dir.Verilen dört yöntemden sadece bu yöntemin benzersiz olduğunu unutmayın.
Özetle, dört yöntem de programdan çıkar. Ancak, ilk ikisinin üretim kodunda kullanılmasının kötü olduğu düşünülmektedir ve sonuncusu yalnızca özel senaryolarda kullanılan standart olmayan, kirli bir yoldur. Dolayısıyla, bir programdan normal bir şekilde çıkmak istiyorsanız, üçüncü yöntemi kullanın:
sys.exit
.Ya da bence daha da iyisi,
sys.exit
in perde arkasında yaptığı şeyi doğrudan yapabilir ve çalıştırabilirsiniz:Bu şekilde, önce
sys
dosyasını içe aktarmanız gerekmez.Ancak, bu seçim sadece bir stil seçimidir ve tamamen size bağlıdır.
lt;sup>*
quit()
,exit()
vesys.exit()
fonksiyonları aynı şekilde çalışır:SystemExit
istisnasını yükseltirler. Yanisys.exit()
her zaman kullanılabilirkenexit()
vequit()
sadecesite
modülü içe aktarılmışsa kullanılabilir olması dışında gerçek bir fark yoktur.os._exit()
fonksiyonu özeldir, herhangi bir temizleme fonksiyonu çağırmadan hemen çıkar (örneğin tamponları yıkamaz). Bu, son derece özel kullanım durumları için tasarlanmıştır... temel olarak, yalnızca bir
os.fork()` çağrısından sonraki çocukta.Sonuç
REPL içinde
exit()
veyaquit()
kullanın.Komut dosyalarında
sys.exit()
işlevini veya tercih edersenizraise SystemExit()
işlevini kullanın.Alt süreçlerin
os.fork()
çağrısından sonra çıkması içinos._exit()
işlevini kullanın.Bunların tümü bağımsız değişkenler olmadan çağrılabilir veya çıkış durumunu belirtebilirsiniz, örneğin, durum 1 ile çıkmak için
exit(1)
veyaraise SystemExit(1)
. Taşınabilir programların 0-255 aralığındaki çıkış durum kodlarıyla sınırlı olduğunu unutmayın, birçok sistemderaise SystemExit(256)
yaparsanız bu kesilir ve işleminiz aslında 0 durumuyla çıkar.Dipnotlar
quit()
veexit()
çağrılabilir örnek nesnelerdir, ancak onlara fonksiyon demenin uygun olduğunu düşünüyorum.Farklı Çıkış Yolları
os._exit()
:exit(0)
:exit(1)
:sys.exit()
:quit()
:Özet
Temelde hepsi aynı şeyi yapar, ancak ne için yaptığınıza da bağlıdır.
Hiçbir şeyi atladığınızı düşünmüyorum ve
quit()
veyaexit()
fonksiyonlarına alışmanızı tavsiye ederim.Eğer büyük dosyalar kullanıyorsanız ya da terminali kontrol etmek için python kullanıyorsanız
sys.exit()
veos._exit()
kullanmalısınız.Aksi takdirde esas olarak
exit()
veyaquit()
kullanın.