Tampaknya python mendukung banyak perintah berbeda untuk menghentikan eksekusi skrip.
Pilihan saya telah menemukan adalah: quit()
, exit()
, sys.exit()
,os._exit()
Apakah saya melewatkan satu pun? Apa perbedaan di antara mereka? Kapan Anda akan menggunakan masing-masing?
os.abort()
Jawaban:
Biarkan saya memberi beberapa informasi tentang mereka:
quit()
hanya menimbulkanSystemExit
pengecualian.Selanjutnya, jika Anda mencetaknya, itu akan memberikan pesan:
Fungsi ini dimasukkan untuk membantu orang yang tidak tahu Python. Setelah semua, salah satu hal yang paling mungkin seorang pemula akan mencoba untuk keluar dari Python adalah mengetik
quit
.Namun demikian,
quit
sebaiknya tidak digunakan dalam kode produksi. Ini karena ini hanya berfungsi jikasite
modul dimuat. Sebagai gantinya, fungsi ini hanya boleh digunakan pada juru bahasa.exit()
adalah alias untukquit
(atau sebaliknya). Mereka ada bersama hanya untuk membuat Python lebih mudah digunakan.Selain itu, ia juga memberikan pesan saat dicetak:
Namun, seperti
quit
,exit
dianggap buruk untuk digunakan dalam kode produksi dan harus disediakan untuk digunakan dalam juru bahasa. Ini karena terlalu bergantung padasite
modul.sys.exit()
juga memunculkanSystemExit
eksepsi. Ini berarti bahwa itu sama denganquit
danexit
dalam hal itu.Namun tidak seperti keduanya,
sys.exit
dianggap baik untuk digunakan dalam kode produksi. Ini karenasys
modul akan selalu ada.os._exit()
keluar dari program tanpa memanggil penangan pembersihan, pembilasan stdio penyangga, dll . Dengan demikian, ini bukan cara standar untuk keluar dan hanya boleh digunakan dalam kasus khusus. Yang paling umum adalah dalam proses anak yang dibuat olehos.fork
.Perhatikan bahwa, dari empat metode yang diberikan, hanya yang ini unik dalam fungsinya.
Disimpulkan, keempat metode keluar dari program. Namun, dua yang pertama dianggap buruk untuk digunakan dalam kode produksi dan yang terakhir adalah cara yang tidak standar dan kotor yang hanya digunakan dalam skenario khusus. Jadi, jika Anda ingin keluar dari program yang biasanya, pergi dengan metode ketiga:
sys.exit
.Atau, bahkan lebih baik menurut saya, Anda bisa langsung melakukan apa yang
sys.exit
ada di balik layar dan berlari:Dengan cara ini, Anda tidak perlu mengimpor
sys
terlebih dahulu.Namun, pilihan ini hanya satu pada gaya dan murni terserah Anda.
sumber
quit
danexit
keluar dari shell sementarasys.exit
tidak.sys.exit()
bukan cara yang dapat diandalkan untuk menutup. Jika disebut di dalam utas, ia hanya akan menghentikan utas itu kecuali jika ada di utas utama. Hal ini dapat menyebabkan banyak kasus di mana program berlanjut karena panggilan itu tidak ada di utas utama, terutama karena beberapa penerjemah akan secara tidak kasat mata memanggil panggilan.end
perintah yang akanraise SystemExit
. Tidak mengerti mengapa tidak ada sesuatu yang sederhana seperti itu, seperti pada BASIC.print
diubah dari pernyataan ke fungsi. Sangat mudah untuk menambahkan sintaks, tetapi ada biaya kerumitan untuk melakukannya.sys.exit()
?Fungsi *
quit()
,,exit()
dansys.exit()
berfungsi dengan cara yang sama: mereka memunculkanSystemExit
eksepsi. Jadi tidak ada perbedaan nyata, kecuali yangsys.exit()
selalu tersedia tetapiexit()
danquit()
hanya tersedia jikasite
modul diimpor.The
os._exit()
fungsi khusus, keluar segera tanpa memanggil fungsi-fungsi pembersihan (itu tidak flush buffer, misalnya). Ini dirancang untuk kasus penggunaan yang sangat khusus ... pada dasarnya, hanya pada anak setelahos.fork()
panggilan.Kesimpulan
Gunakan
exit()
atauquit()
dalam REPL.Gunakan
sys.exit()
dalam skrip, atauraise SystemExit()
jika Anda mau.Gunakan
os._exit()
untuk proses anak untuk keluar setelah panggilan keos.fork()
.Semua ini dapat dipanggil tanpa argumen, atau Anda dapat menentukan status keluar, misalnya,
exit(1)
atauraise SystemExit(1)
keluar dengan status 1. Perhatikan bahwa program portabel terbatas untuk keluar dari kode status dalam kisaran 0-255, jika Andaraise SystemExit(256)
pada banyak sistem ini akan terpotong dan proses Anda benar-benar akan keluar dengan status 0.Catatan kaki
* Sebenarnya,
quit()
danexit()
merupakan objek instance yang bisa dipanggil, tapi saya pikir tidak apa-apa untuk memanggilnya fungsi.sumber
Cara Keluar yang Berbeda
os._exit()
:exit(0)
:exit(1)
:sys.exit()
:quit()
:Ringkasan
Pada dasarnya mereka semua melakukan hal yang sama, namun, itu juga tergantung pada apa yang Anda lakukan.
Saya tidak berpikir Anda meninggalkan sesuatu dan saya akan merekomendasikan untuk terbiasa
quit()
atauexit()
.Anda akan menggunakan
sys.exit()
danos._exit()
terutama jika Anda menggunakan file besar atau menggunakan python untuk mengontrol terminal.Atau terutama menggunakan
exit()
atauquit()
.sumber
sys.exit
adalah cara kanonik untuk keluar.Secara internal
sys.exit
hanya menaikkanSystemExit
. Namun, panggilansys.exit
lebih idiomatis daripada mengangkatSystemExit
secara langsung.os.exit
adalah panggilan sistem tingkat rendah yang keluar secara langsung tanpa memanggil penangan pembersihan.quit
danexit
ada hanya untuk memberikan jalan keluar yang mudah dari Python prompt. Ini untuk pengguna baru atau pengguna yang secara tidak sengaja memasukkan prompt Python, dan tidak ingin tahu sintaks yang tepat. Mereka cenderung mencoba mengetikexit
atauquit
. Meskipun ini tidak akan keluar dari juru bahasa, itu setidaknya mengeluarkan pesan yang memberi tahu mereka jalan keluar:Ini pada dasarnya hanya peretasan yang memanfaatkan fakta bahwa penerjemah mencetak
__repr__
ekspresi apa pun yang Anda masukkan saat diminta.sumber