Mengakhiri sebuah script Python

Saya sadar die() perintah dalam PHP yang berhenti naskah awal.

Bagaimana saya bisa melakukan ini di Python?

Larutan
import sys
sys.exit()

detail dari sys modul dokumentasi:

sys.keluar([arg])

Keluar dari Python. Hal ini dilaksanakan dengan menaikkan SystemExit pengecualian, sehingga pembersihan tindakan yang ditentukan oleh akhirnya klausa dari mencoba pernyataan yang dihormati, dan itu adalah mungkin untuk mencegat exit upaya di luar tingkat.

argumen opsional arg dapat integer memberikan status exit (default ke nol), atau jenis lain dari objek. Jika adalah bilangan bulat, nol dianggap "sukses penghentian" dan setiap nilai bukan nol adalah dianggap "abnormal termination" oleh kerang dan sejenisnya. Kebanyakan sistem memerlukan itu untuk berada di kisaran 0-127, dan menghasilkan hasil undefined jika tidak. Beberapa sistem memiliki konvensi untuk menetapkan tertentu makna tertentu kode keluar, tapi ini umumnya terbelakang; Unix program umumnya menggunakan 2 untuk baris perintah sintaks kesalahan dan 1 untuk semua jenis lain dari kesalahan. Jika objek lain lebih berlalu, tidak ada Satupun yang setara dengan kelulusan nol, dan objek lain yang lebih dicetak ke stderr dan hasil yang keluar kode 1. Secara khusus, sys.exit("beberapa pesan kesalahan") adalah cara cepat untuk keluar dari program terjadi kesalahan.

Sejak exit() pada akhirnya "hanya" menimbulkan pengecualian, itu hanya akan keluar proses ketika dipanggil dari thread utama, dan pengecualian adalah tidak dicegat.

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.

Komentar (7)

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:

#do stuff
if this == that:
  quit()
Komentar (5)

Cara lain adalah:

raise SystemExit
Komentar (2)

Anda juga dapat menggunakan hanya exit().

Perlu diingat bahwa sys.exit(), exit(), quit(), dan os._keluar(0) membunuh interpreter Python. Oleh karena itu, jika muncul dalam naskah dipanggil dari script lain dengan execfile(), berhenti pelaksanaan investasi script.

Lihat "Stop eksekusi dari script yang disebut dengan execfile" untuk menghindari hal ini.

Komentar (0)

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.

Komentar (0)

I've hanya menemukan bahwa ketika menulis multithreadded aplikasi, meningkatkan SystemExit dan sys.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.

import threading
import time
import sys
import os

def kenny(num=0):
    if num > 3:
        # print("Kenny dies now...")
        # raise SystemExit #Kenny will die, but Cartman will live forever
        # sys.exit(1) #Same as above

        print("Kenny dies and also kills Cartman!")
        os._exit(1)
    while True:
        print("Kenny lives: {0}".format(num))
        time.sleep(1)
        num += 1
        kenny(num)

def cartman():
    i = 0
    while True:
        print("Cartman lives: {0}".format(i))
        i += 1
        time.sleep(1)

if __name__ == '__main__':
    daemon_kenny = threading.Thread(name='kenny', target=kenny)
    daemon_cartman = threading.Thread(name='cartman', target=cartman)
    daemon_kenny.setDaemon(True)
    daemon_cartman.setDaemon(True)

    daemon_kenny.start()
    daemon_cartman.start()
    daemon_kenny.join()
    daemon_cartman.join()
Komentar (4)
from sys import exit
exit()

Sebagai parameter, anda dapat melewati exit code, yang akan kembali ke OS. Default adalah 0.

Komentar (2)

I'm seorang pemula total, tetapi tentunya ini lebih bersih dan lebih terkontrol

def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        return
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

Program dihentikan

dari

import sys
def main():
    try:
        Answer = 1/0
        print  Answer
    except:
        print 'Program terminated'
        sys.exit()
    print 'You wont see this'

if __name__ == '__main__': 
    main()

...

Program dihentikan Traceback (most recent call last): File "Z:\Directory\testdieprogram.py", baris 12, di main() File "Z:\Directory\testdieprogram.py", baris 8, di utama sys.exit() SystemExit

Edit

Intinya adalah bahwa program ini berakhir dengan lancar dan damai, bukan "aku'VE BERHENTI !!!!"

Komentar (3)

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:

## My example:
if "ATG" in my_DNA: 
    ## 
else: 
    print("Start codon is missing! Check your DNA sequence!");
    exit(); ## as most folks said above

Kemudian, saya menemukan hal yang lebih singkat untuk hanya melempar kesalahan:

## My example revised:
if "ATG" in my_DNA: 
    ## 
else: 
    raise ValueError("Start codon is missing! Check your DNA sequence!");
Komentar (0)

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.

Komentar (0)