Lebih
Mengakhiri sebuah script Python
Saya sadar die()
perintah dalam PHP yang berhenti naskah awal.
Bagaimana saya bisa melakukan ini di Python?
973
10
detail dari
sys
modul dokumentasi:Catatan bahwa ini adalah 'bagus' cara untuk keluar. @glyphtwistedmatrix di bawah ini menunjukkan bahwa jika anda ingin 'sulit keluar', anda dapat menggunakan os._keluar(errorcode), meskipun itu's mungkin os-spesifik untuk batas tertentu (mungkin tidak mengambil errorcode di bawah windows, misalnya), dan itu pasti kurang ramah karena itu doesn't membiarkan penerjemah melakukan pembersihan sebelum proses mati.
Cara sederhana untuk menghentikan script Python awal adalah dengan menggunakan built-in fungsi quit(). Ada tidak perlu untuk mengimpor perpustakaan, dan itu adalah efisien dan sederhana.
Contoh:
Cara lain adalah:
Anda juga dapat menggunakan hanya
exit()
.Perlu diingat bahwa
sys.exit()
,exit()
,quit()
, danos._keluar(0)
membunuh interpreter Python. Oleh karena itu, jika muncul dalam naskah dipanggil dari script lain denganexecfile()
, berhenti pelaksanaan investasi script.Lihat "Stop eksekusi dari script yang disebut dengan execfile" untuk menghindari hal ini.
Sementara anda harus umumnya lebih memilih
sys.keluar
karena lebih "ramah" untuk kode lainnya, semua itu sebenarnya adalah exception.Jika anda yakin bahwa anda perlu untuk keluar dari suatu proses segera, dan anda mungkin dalam beberapa handler pengecualian yang akan menangkap
SystemExit
, ada lagi fungsi -os._keluar
- yang berakhir dengan segera pada tingkat C dan tidak melakukan apapun dari normal air mata-down dari penerjemah; misalnya, kait terdaftar dengan "atexit" modul yang tidak dieksekusi.I've hanya menemukan bahwa ketika menulis multithreadded aplikasi,
meningkatkan SystemExit
dansys.exit()
keduanya membunuh hanya menjalankan thread. Di sisi lain,os._keluar()
keluar dari seluruh proses. Hal ini dibahas di sini.Contoh di bawah ini memiliki 2 benang. Kenny dan Cartman. Cartman seharusnya hidup selamanya, tapi Kenny disebut rekursif dan akan mati setelah 3 detik. (pemanggilan rekursif adalah bukan cara terbaik, tapi aku punya alasan lain)
Jika kita juga ingin Cartman untuk mati ketika Kenny mati, Kenny harus pergi dengan
os._keluar
, jika tidak, hanya Kenny akan mati dan Cartman akan hidup selamanya.Sebagai parameter, anda dapat melewati exit code, yang akan kembali ke OS. Default adalah 0.
I'm seorang pemula total, tetapi tentunya ini lebih bersih dan lebih terkontrol
...
dari
...
Edit
Intinya adalah bahwa program ini berakhir dengan lancar dan damai, bukan "aku'VE BERHENTI !!!!"
Di Python 3.5, saya mencoba untuk memasukkan kode yang sama tanpa menggunakan modul (misalnya sys, Biopy) yang lain dari apa yang's built-in untuk menghentikan script dan mencetak pesan kesalahan kepada pengguna. Berikut ini's contoh saya:
Kemudian, saya menemukan hal yang lebih singkat untuk hanya melempar kesalahan:
Ada beberapa cara standar untuk melakukannya: ``Python import sys sys.keluar(404)
atau...
keluar(404)
atau...
berhenti(404)
atau...
meningkatkan SystemExit(404)
Saya puas bahwa (pada [`repl.itu`][1] setidaknya,) tak satu pun dari ini _completely_ menutup penerjemah; itu selalu bisa menjalankan kode di repl, bahkan setelah `keluar`, dll. satu-satunya cara saya bisa memikirkan yang selalu berhenti penerjemah dari persidangan dengan simulasi sistem keluar dengan tidur.
Python waktu impor def forceStop(errmsg="berhenti darurat dikerahkan. :("): cetak(f"\033[31m{errmsg}\033[0m") waktu.tidur(10000000)`` Ini jelas tidak dianjurkan.