pengembangan-web-mp-pd.com

Mengakhiri skrip Python

Saya mengetahui perintah die() di PHP yang menghentikan skrip lebih awal.

Bagaimana saya bisa melakukan ini dengan Python?

867
Teifion
import sys
sys.exit()

detail dari sys dokumentasi modul :

sys.exit([arg])

Keluar dari Python. Ini diimplementasikan dengan menaikkan pengecualian SystemExit , jadi tindakan pembersihan yang ditentukan oleh klausa terakhir dari try pernyataan dihormati, dan dimungkinkan untuk mencegat upaya keluar di level luar.

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

Karena exit() akhirnya "hanya" menimbulkan pengecualian, itu hanya akan keluar dari proses ketika dipanggil dari utas utama, dan pengecualian tidak dicegat.

Perhatikan bahwa ini adalah cara 'Bagus' untuk keluar. @ glyphtwistedmatrix di bawah menunjukkan bahwa jika Anda menginginkan 'hard exit', Anda dapat menggunakan os._exit ( errorcode ), meskipun kemungkinan os-spesifik sampai batas tertentu (mungkin tidak ambil kode kesalahan di bawah windows, misalnya), dan itu pasti kurang ramah karena tidak membiarkan penerjemah melakukan pembersihan sebelum proses mati.

1180
pjz

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

Contoh:

#do stuff
if this == that:
  quit()
258
j.m.g.r

Cara lain adalah:

raise SystemExit
107
Vhaerun

Meskipun Anda umumnya harus lebih memilih sys.exit karena lebih "ramah" dari kode lain, yang sebenarnya dilakukannya hanyalah memunculkan pengecualian.

Jika Anda yakin bahwa Anda harus segera keluar dari suatu proses, dan Anda mungkin berada di dalam beberapa handler pengecualian yang dapat menangkap SystemExit, ada fungsi lain - os._exit - yang berakhir segera pada level C dan tidak melakukan robekan normal -jatuhkan penerjemah; misalnya, kait yang terdaftar dengan modul "atexit" tidak dieksekusi.

62
Glyph

Anda juga dapat menggunakan exit().

Ingatlah bahwa sys.exit(), exit(), quit(), dan os._exit(0) kill juru bahasa Python. Oleh karena itu, jika muncul dalam skrip yang dipanggil dari skrip lain oleh execfile(), itu menghentikan eksekusi kedua skrip.

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

58
Space cowboy
from sys import exit
exit()

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

24
cleg

Saya baru tahu bahwa ketika menulis aplikasi multithreadded, raise SystemExit dan sys.exit() keduanya hanya membunuh utas yang berjalan. Di sisi lain, os._exit() keluar dari seluruh proses. Ini dibahas di sini.

Contoh di bawah ini memiliki 2 utas. Kenny dan Cartman. Cartman seharusnya hidup selamanya, tetapi Kenny dipanggil 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 meninggal, Kenny harus pergi dengan 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 __== '__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()
21
eaydin

Saya seorang pemula, 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 __== '__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 __== '__main__': 
    main()

...

Program menghentikan Traceback (panggilan terakhir terakhir): File "Z:\Directory\testdieprogram.py", baris 12, di main () File "Z:\Directory\testdieprogram.py", baris 8, di sys.exit utama ) SystemExit

Edit

Intinya adalah bahwa program berakhir dengan lancar dan damai, daripada "AKU BERHENTI !!!!"

15
Floggedhorse

Di Python 3.5, saya mencoba untuk memasukkan kode yang sama tanpa menggunakan modul (mis. Sys, Biopy) selain apa yang ada di dalamnya 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

Di kemudian hari, saya mendapati lebih mudah untuk hanya melakukan kesalahan:

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