Pertanyaan Mengakhiri skrip Python


Saya sadar akan hal itu die() perintah dalam PHP yang menghentikan skrip awal.

Bagaimana saya bisa melakukan ini dengan Python?


751
2017-09-16 15:35


asal


Jawaban:


import sys
sys.exit()

rincian dari sys dokumentasi modul:

sys.keluar([arg])

Keluar dari Python. Ini dilaksanakan dengan menaikkan      SystemExit pengecualian, jadi tindakan pembersihan yang ditentukan oleh akhirnya klausa     dari try pernyataan dihormati, dan mungkin untuk mencegat     upaya keluar di tingkat luar.

Argumen opsional arg dapat berupa integer yang memberikan status keluar     (default ke nol), atau jenis objek lain. Jika itu adalah bilangan bulat,     nol dianggap "penghentian sukses" dan setiap nilai bukan nol adalah     dianggap "penghentian abnormal" oleh kerang dan sejenisnya. Kebanyakan sistem     mengharuskannya berada di kisaran 0-127, dan menghasilkan hasil yang tidak ditentukan     jika tidak. Beberapa sistem memiliki konvensi untuk menetapkan spesifik     makna untuk kode keluar tertentu, tetapi ini umumnya     terbelakang; Program Unix umumnya menggunakan 2 untuk sintaks baris perintah     kesalahan dan 1 untuk semua jenis kesalahan lainnya. Jika jenis objek lain     dilewatkan, Tidak ada yang setara dengan melewatkan nol, dan objek lainnya adalah     dicetak untuk stderr dan menghasilkan kode keluar 1. Khususnya,      sys.exit("some error message") adalah cara cepat untuk keluar dari program kapan     kesalahan terjadi.

Sejak exit() akhirnya "hanya" menimbulkan pengecualian, itu hanya akan keluar     proses saat dipanggil dari utas utama, dan pengecualiannya tidak     disadap.

Perhatikan bahwa ini adalah cara yang 'bagus' untuk keluar. @glyphtwistedmatrix di bawah ini menunjukkan bahwa jika Anda ingin 'keluar keras', Anda dapat menggunakan os._exit (kode kesalahan), meskipun kemungkinan besar os-spesifik sampai batas tertentu (mungkin tidak mengambil kode kesalahan di bawah jendela, misalnya), dan itu pasti kurang ramah karena tidak membiarkan interpreter melakukan pembersihan sebelum prosesnya mati.


1031
2017-09-16 15:36



Cara sederhana untuk mengakhiri skrip Python lebih awal adalah dengan menggunakan fungsi built-in quit (). Tidak perlu mengimpor perpustakaan apa pun, dan itu efisien dan sederhana.

Contoh:

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

219
2018-02-12 15:50



Cara lain adalah:

raise SystemExit

102
2017-09-16 15:37



Sementara Anda umumnya harus lebih suka sys.exit karena lebih "bersahabat" dengan kode lain, semua itu sebenarnya meningkatkan pengecualian.

Jika Anda yakin bahwa Anda perlu keluar dari proses segera, dan Anda mungkin berada di dalam beberapa pengendali pengecualian yang akan menangkap SystemExit, ada fungsi lain - os._exit - yang segera berakhir pada level C dan tidak melakukan salah satu penurunan normal dari interpreter; misalnya, pengait yang terdaftar dengan modul "atexit" tidak dieksekusi.


59
2017-09-16 20:08



Anda juga dapat menggunakan secara sederhana exit().

Ingat itu sys.exit(), exit(), quit(), dan os._exit(0)  membunuh penerjemah Python. Oleh karena itu, jika muncul dalam skrip yang dipanggil dari skrip lain oleh execfile(), menghentikan eksekusi kedua skrip.

Lihat "Hentikan eksekusi skrip yang dipanggil dengan execfile"untuk menghindari ini.


47
2018-04-22 14:57



from sys import exit
exit()

Sebagai parameter Anda dapat melewati kode keluar, yang akan dikembalikan ke OS. Default adalah 0.


25
2017-09-16 15:38



Saya benar-benar pemula tetapi pasti 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 (panggilan terakhir terakhir terakhir): File "Z: \ Directory \ testdieprogram.py", baris 12, di         main () File "Z: \ Directory \ testdieprogram.py", baris 8, di main         sys.exit () SystemExit

Edit

Intinya adalah bahwa program berakhir dengan lancar dan damai, bukan "AKU MENGHENTIKAN !!!!"


16
2018-03-19 11:13



Saya baru saja mengetahui bahwa ketika menulis aplikasi multithread, raise SystemExit dan sys.exit() keduanya hanya membunuh thread yang sedang berjalan. Di samping itu, os._exit() keluar dari keseluruhan proses. Ini sudah dibahas sini.

Contoh di bawah ini memiliki 2 utas. Kenny dan Cartman. Cartman seharusnya hidup selamanya, tetapi Kenny disebut secara rekursif dan harus mati setelah 3 detik. (Panggilan rekursif bukan cara terbaik, tapi saya punya alasan lain)

Jika kita juga ingin Cartman mati ketika Kenny mati, Kenny harus pergi os._exit, jika tidak, hanya Kenny yang 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()

13
2017-11-10 10:59



Dalam Python 3.5, saya mencoba memasukkan kode yang serupa tanpa menggunakan modul (mis. Sys, Biopy) selain apa yang sudah ada untuk menghentikan skrip dan mencetak pesan kesalahan ke pengguna saya. Inilah contoh saya:

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

Kemudian, saya menemukan itu lebih ringkas untuk hanya melempar kesalahan:

## My example revised:
if "ATG" in my_DNA: 
    ## <Do something & proceed...>
else: 
    raise ValueError("Start codon is missing! Check your DNA sequence!");

5
2017-12-27 18:12



coba gunakan istirahat setelah satu loop kemudian gunakan quit () atau exit ().


0
2018-06-11 00:00