Saya ingin tahu cara keluar dari Python tanpa memiliki traceback dump pada output.
Saya masih ingin dapat mengembalikan kode kesalahan tetapi saya tidak ingin menampilkan log traceback.
Saya ingin dapat keluar menggunakan exit(number)
tanpa jejak tetapi dalam kasus Pengecualian (bukan keluar) saya ingin jejak.
Jawaban:
Anda mungkin menemukan pengecualian dan program keluar karena ini (dengan traceback). Karena itu, hal pertama yang harus dilakukan adalah menangkap pengecualian itu, sebelum keluar dengan bersih (mungkin dengan pesan, contoh yang diberikan).
Cobalah sesuatu seperti ini dalam
main
rutinitas Anda :sumber
except Exception:
kesys.exit(0)
, inklusif. Sudah merupakan perilaku default untuk mencetak traceback pada semua pengecualian yang tidak ditangani, dan untuk keluar setelah kode berakhir, jadi mengapa repot-repot melakukan hal yang sama secara manual?sys.exit()
harus digunakan untuk program.exit()
dimaksudkan untuk shell interaktif. Lihat Perbedaan antara exit () dan sys.exit () dalam Python? .Mungkin Anda mencoba menangkap semua pengecualian dan ini menangkap
SystemExit
pengecualian yang diajukansys.exit()
?Secara umum, menggunakan
except:
tanpa menyebutkan pengecualian adalah ide yang buruk. Anda akan menangkap semua jenis barang yang tidak ingin Anda tangkap - sepertiSystemExit
- dan juga bisa menutupi kesalahan pemrograman Anda sendiri. Contoh saya di atas konyol, kecuali Anda melakukan sesuatu dalam hal pembersihan. Anda bisa menggantinya dengan:Jika Anda perlu keluar tanpa menaikkan
SystemExit
:Saya melakukan ini, dalam kode yang berjalan di bawah unittest dan panggilan
fork()
. Unittest mendapat ketika proses bercabang meningkatSystemExit
. Ini jelas merupakan kasus sudut!sumber
SystemExit
hanya untuk meneleponsys.exit(e)
? Menghapus kedua garis memiliki efek yang sama . Juga, pembersihan milikfinally:
, tidakexcept Exception: ... raise
.sumber
sesuatu seperti
import sys; sys.exit(0)
?sumber
Kode berikut tidak akan memunculkan pengecualian dan akan keluar tanpa traceback:
Lihat pertanyaan ini dan jawaban terkait untuk lebih jelasnya. Terkejut mengapa semua jawaban lain begitu rumit.
sumber
Adalah praktik yang jauh lebih baik untuk menghindari penggunaan sys.exit () dan alih-alih memunculkan / menangani pengecualian agar program dapat selesai dengan bersih. Jika Anda ingin mematikan traceback, cukup gunakan:
Anda dapat mengatur ini di bagian atas skrip Anda untuk menekan semua keluaran traceback, tetapi saya lebih suka menggunakannya lebih hemat, misalnya "kesalahan yang diketahui" di mana saya ingin hasilnya bersih, misalnya dalam file foo.py:
Jika CalledProcessError tertangkap, hasilnya akan terlihat seperti ini:
Jika ada kesalahan lain yang terjadi, kami masih mendapatkan hasil traceback penuh.
sumber
sys.trackbacklimit
dalam Python 3, lihat jawaban ini .Gunakan fungsi python built-in quit () dan hanya itu. Tidak perlu mengimpor perpustakaan apa pun. Saya menggunakan python 3.4
sumber
Saya akan melakukannya dengan cara ini:
sumber
Bagaimana dengan
Tidak ada traceback dan entah bagaimana lebih eksplisit.
sumber
sumber