ความแตกต่างระหว่าง exit (0) และ exit (1) ใน Python


167

ความแตกต่างระหว่างexit(0)และexit(1)ในงูใหญ่คืออะไร?

ฉันลองมองไปรอบ ๆ แต่ไม่พบคำถามเฉพาะในบรรทัดเหล่านี้ หากตอบแล้วลิงก์จะเพียงพอ


9
นี่คือลิงค์ไปสู่exit()ในเอกสารซึ่งพาฉันไปตลอดกาลเพื่อค้นหา
Ryne Everett


เพิ่งรู้ว่ามีการexit(0)พูดคุยกันในคำถามนี้และอีกอันที่มีขีดล่าง_exit(0)ความแตกต่างอธิบายไว้ที่นี่
cardamom

สิ่งที่ดีเกี่ยวกับรหัสเหล่านี้คือพวกเขาสามารถใช้โดยตรงในifคำสั่งในbashwrapper ดังนั้นการดำเนินการเพิ่มเติมสามารถดำเนินการได้หรือไม่ว่าโปรแกรม Python ประสบความสำเร็จหรือไม่ว่าจะยกสถานะที่ไม่เป็นศูนย์
SDsolar

แปลกถ้า 0 เป็นเท็จและ 1 เป็นจริงใน Python คุณคิดว่าตัวเลขจะมีความหมายตรงกันข้าม
Monica Heddneck

คำตอบ:


248

0 และ 1 คือรหัสทางออก

exit(0) หมายถึงทางออกที่สะอาดโดยไม่มีข้อผิดพลาด / ปัญหา

exit(1) หมายความว่ามีปัญหา / ข้อผิดพลาด / ปัญหาและนั่นคือสาเหตุที่โปรแกรมออกจาก

นี่ไม่ใช่ Python ที่เจาะจงและเป็นเรื่องธรรมดา รหัสทางออกที่ไม่เป็นศูนย์จะถือว่าเป็นการออกที่ผิดปกติและในบางครั้งรหัสข้อผิดพลาดจะระบุว่าปัญหาคืออะไร รหัสข้อผิดพลาดเป็นศูนย์หมายถึงการออกที่ประสบความสำเร็จ

สิ่งนี้มีประโยชน์สำหรับโปรแกรมอื่น ๆ เชลล์ผู้โทร ฯลฯ เพื่อทราบว่าเกิดอะไรขึ้นกับโปรแกรมของคุณและดำเนินการต่อ


10
แล้วทางออก (-1) ล่ะ?
Faizan

16
@Faizan: รหัสทางออกคือค่า 8 บิตบน Unix หากคุณเรียกใช้exit(-1)ค่าจะเท่ากับexit(255)- 8 บิตที่สำคัญน้อยที่สุดจะถูกส่งไปยังโปรแกรมการเรียกใช้ (เชลล์หรืออะไรก็ตาม)
Jonathan Leffler

4
โปรดทราบว่าตามเอกสาร , exit()ถูกเพิ่มโดยsiteโมดูลและไม่ควรนำมาใช้โดยโปรแกรม ให้ใช้sys.exit()หรือraise SystemExitแทนหากคุณไม่ต้องการนำเข้าโมดูลอื่น
daviewales

2
เนื่องจากรหัสออกจาก Unix / Linux ฉันคิดว่า 0 เป็นจริงและ 1 คือค่าเท็จในเงื่อนไข Python
vlyalcin

19

สิ่งนี้จะกำหนดสถานะการออกของโปรแกรมเมื่อการรันเสร็จสิ้น (โดยทั่วไป 0 สำหรับความสำเร็จและ 1 สำหรับข้อผิดพลาด)

มันไม่ได้เป็นเอกลักษณ์ของ Python และเอฟเฟกต์ที่แน่นอนนั้นขึ้นอยู่กับระบบปฏิบัติการของคุณและวิธีการเรียกใช้โปรแกรม (แม้ว่า 99% ของเวลาถ้าคุณเพียงแค่ใช้สคริปต์ Python มันไม่สำคัญ)


12

แบบแผนมาตรฐานสำหรับโปรแกรม C ทั้งหมดรวมถึง Python นั้นใช้exit(0)เพื่อระบุความสำเร็จและexit(1)หรือค่าที่ไม่เป็นศูนย์อื่น ๆ (ในช่วง 1..255) เพื่อระบุความล้มเหลว ค่าใด ๆ ที่อยู่นอกช่วง 0.255 จะได้รับการปฏิบัติแบบโมดูโล 256 (สถานะทางออกจะถูกเก็บไว้ในค่า 8 บิต) บางครั้งสิ่งนั้นจะถูกถือว่าเป็นลายเซ็น (ดังนั้นคุณอาจเห็น -128, -127 ฯลฯ ) แต่โดยทั่วไปแล้วจะถือว่าเป็นลายเซ็น

สถานะนี้ใช้ได้กับรหัสที่เรียก Python การประชุมนี้ใช้ข้ามแพลตฟอร์มแม้ว่าความหมายของสถานะการออกที่ไม่เป็นศูนย์อาจแตกต่างกันไปตามแพลตฟอร์มที่แตกต่างกัน


7

หมายเลขที่คุณส่งไปยัง exit()ฟังก์ชันนี้เป็นเพียงรหัสส่งคืนของโปรแกรมซึ่งมอบให้กับระบบปฏิบัติการ จากมุมมองของโปรแกรมของคุณไม่มีความแตกต่าง: การดำเนินการจะสิ้นสุดในทั้งสองกรณีและค่าที่มอบให้กับฟังก์ชั่นจะมอบให้กับระบบปฏิบัติการ แต่เครื่องมือและสคริปต์บางอย่างคำนึงถึงรหัสออกของโปรแกรม เครื่องมือส่วนใหญ่จะคืนค่า 0 เมื่อพวกเขาทำสำเร็จและไม่ใช่ศูนย์เพื่อระบุข้อผิดพลาด

ดังนั้นหากโปรแกรมของคุณถูกเรียกใช้จากสคริปต์เครื่องมืออัตโนมัติหรือจากซอฟต์แวร์อื่น ๆ ที่คำนึงถึงรหัสส่งคืน (เช่น IDE) คุณจะต้องระมัดระวังในสิ่งที่คุณส่งคืน

เมื่อมีข้อสงสัยให้กลับ 0 เพื่อระบุว่าทุกอย่างเรียบร้อย


6

exit(0): สิ่งนี้ทำให้โปรแกรมออกจากพร้อมการสิ้นสุดที่สำเร็จ

exit(1): สิ่งนี้ทำให้โปรแกรมออกจากพร้อมความหมายเฉพาะของระบบ

ในหลาย ๆ ระบบexit(1)สัญญาณบางอย่างของความล้มเหลวอย่างไรก็ตามไม่มีการรับประกัน

ตามที่ฉันจำได้มาตรฐาน C จะรับรู้ถึงค่าทางออกมาตรฐานสามค่าเท่านั้น

  • EXIT_SUCCESS - การยกเลิกสำเร็จ
  • EXIT_FAILURE - การยกเลิกไม่สำเร็จ
  • 0 -- เหมือนกับ EXIT_SUCCESS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.