ดูเหมือนว่างูใหญ่สนับสนุนคำสั่งต่าง ๆ มากมายเพื่อหยุดการทำงานของสคริปต์
ตัวเลือกที่ฉันได้พบคือ: quit(), exit(), sys.exit(),os._exit()
ฉันเคยพลาดบ้างไหม? ความแตกต่างระหว่างพวกเขาคืออะไร คุณจะใช้แต่ละครั้งเมื่อใด
ดูเหมือนว่างูใหญ่สนับสนุนคำสั่งต่าง ๆ มากมายเพื่อหยุดการทำงานของสคริปต์
ตัวเลือกที่ฉันได้พบคือ: quit(), exit(), sys.exit(),os._exit()
ฉันเคยพลาดบ้างไหม? ความแตกต่างระหว่างพวกเขาคืออะไร คุณจะใช้แต่ละครั้งเมื่อใด
คำตอบ:
ให้ฉันให้ข้อมูลบางอย่างกับพวกเขา:
quit()เพียงยกSystemExitข้อยกเว้น
นอกจากนี้หากคุณพิมพ์มันจะให้ข้อความ:
>>> print (quit)
Use quit() or Ctrl-Z plus Return to exit
>>>
ฟังก์ชั่นนี้รวมอยู่ในการช่วยเหลือผู้ที่ไม่รู้จัก Python quitหลังจากที่ทุกหนึ่งในสิ่งที่มีแนวโน้มมากที่สุดเป็นมือใหม่จะพยายามที่จะออกจากงูหลามเป็นพิมพ์ใน
อย่างไรก็ตามไม่quitควรใช้ในรหัสการผลิต นี่เป็นเพราะมันใช้งานได้เฉพาะเมื่อโหลดโมดูล ควรใช้ฟังก์ชันนี้ในล่ามเท่านั้นsite
exit()เป็นนามแฝงสำหรับquit(หรือในทางกลับกัน) พวกมันอยู่ด้วยกันเพียงเพื่อให้งูใหญ่ใช้งานง่ายขึ้น
นอกจากนี้มันยังให้ข้อความเมื่อพิมพ์:
>>> print (exit)
Use exit() or Ctrl-Z plus Return to exit
>>>
แต่ชอบquit, exitถือว่าดีที่จะใช้ในรหัสการผลิตและควรจะสงวนไว้สำหรับใช้ในการล่าม นี่เป็นเพราะมันอาศัยsiteโมดูล
sys.exit()ยังทำให้เกิดSystemExitข้อยกเว้น ซึ่งหมายความว่ามันเหมือนกันquitและexitในแง่นั้น
ซึ่งแตกต่างจากทั้งสองอย่างsys.exitนี้ถือว่าดีที่จะใช้ในรหัสการผลิต นี่เป็นเพราะsysโมดูลจะอยู่ที่นั่นเสมอ
os._exit()ออกจากโปรแกรมโดยไม่ต้องโทรไสทำความสะอาดล้างบัฟเฟอร์ stdio ฯลฯ ดังนั้นจึงไม่ใช่วิธีมาตรฐานในการออกและควรใช้ในกรณีพิเศษเท่านั้น ที่พบมากที่สุดของเหล่านี้อยู่ในกระบวนการเด็ก (e) os.forkที่สร้างขึ้นโดย
โปรดทราบว่าจากสี่วิธีที่ระบุมีเพียงวิธีนี้เท่านั้นที่ไม่ซ้ำกันในสิ่งที่ทำ
โดยสรุปแล้วทั้งสี่วิธีจะออกจากโปรแกรม อย่างไรก็ตามทั้งสองครั้งแรกถือว่าไม่ถูกต้องที่จะใช้ในรหัสการผลิตและสุดท้ายคือวิธีที่ไม่ได้มาตรฐานและสกปรกที่ใช้เฉพาะในสถานการณ์พิเศษ sys.exitดังนั้นถ้าคุณต้องการที่จะออกจากโปรแกรมปกติไปกับวิธีที่สาม:
หรือในความคิดของฉันที่ดียิ่งขึ้นคุณสามารถทำสิ่งที่sys.exitอยู่เบื้องหลังและดำเนินการโดยตรง:
raise SystemExit
ด้วยวิธีนี้คุณไม่จำเป็นต้องนำเข้าsysก่อน
อย่างไรก็ตามตัวเลือกนี้เป็นเพียงหนึ่งในสไตล์และขึ้นอยู่กับคุณอย่างหมดจด
quitและexitออกจาก shell ในขณะที่sys.exitทำไม่ได้
sys.exit()ไม่ใช่วิธีการปิดที่เชื่อถือได้ หากมีการเรียกใช้ภายในเธรดจะเป็นการยกเลิกเฉพาะเธรดนั้นเว้นแต่ว่าอยู่ในเธรดหลัก สิ่งนี้สามารถนำไปสู่หลายกรณีที่โปรแกรมดำเนินการต่อเนื่องจากการโทรไม่ได้อยู่ในเธรดหลัก
end raise SystemExitอย่าดูว่าทำไมไม่มีอะไรง่าย ๆ แบบนี้เหมือนใน BASIC
printเปลี่ยนจากคำสั่งเป็นฟังก์ชั่น ง่ายต่อการเพิ่มไวยากรณ์ แต่มีความซับซ้อนในการทำเช่นนั้น
sys.exit()หรือไม่?
ฟังก์ชั่น* quit() , exit()และsys.exit()ฟังก์ชั่นในลักษณะเดียวกัน: พวกเขายกSystemExitข้อยกเว้น ดังนั้นจึงไม่มีความแตกต่างกันจริงยกเว้นว่าsys.exit()อยู่เสมอ แต่exit()และquit()จะมีให้เฉพาะถ้าsiteโมดูลจะถูกนำเข้า
os._exit()ฟังก์ชั่นพิเศษก็ออกทันทีโดยไม่มีการเรียกฟังก์ชั่นการทำความสะอาดใด ๆ (มันไม่บัฟเฟอร์ไม่ล้างตัวอย่าง) นี้ถูกออกแบบมาสำหรับกรณีการใช้งานที่มีความเชี่ยวชาญสูง ... โดยทั่วไปเฉพาะในเด็กหลังจากการos.fork()โทร
ใช้exit()หรือquit()ใน REPL
ใช้sys.exit()ในสคริปต์หรือraise SystemExit()หากคุณต้องการ
ใช้สำหรับกระบวนการที่เด็กเพื่อออกหลังจากที่โทรไปos._exit()os.fork()
สิ่งเหล่านี้สามารถเรียกได้โดยไม่มีข้อโต้แย้งหรือคุณสามารถระบุสถานะการออกเช่นexit(1)หรือraise SystemExit(1)เพื่อออกด้วยสถานะ 1 โปรดทราบว่าโปรแกรมแบบพกพาถูก จำกัด ไว้ที่รหัสสถานะการออกในช่วง 0-255 หากคุณraise SystemExit(256)ใช้ระบบหลายระบบ รับการตัดทอนและกระบวนการของคุณจะออกจากจริงด้วยสถานะ 0
*จริงquit()และexit()เป็นวัตถุเช่น callable แต่ฉันคิดว่ามันโอเคที่จะเรียกใช้ฟังก์ชันพวกเขา
os._exit():
exit(0):
exit(1):
sys.exit():
quit():
โดยพื้นฐานแล้วพวกเขาทั้งหมดทำสิ่งเดียวกันอย่างไรก็ตามมันยังขึ้นอยู่กับสิ่งที่คุณทำ
ผมไม่คิดว่าคุณได้ใส่อะไรออกไปและผมจะแนะนำการใช้หรือquit()exit()
คุณจะใช้sys.exit()และos._exit()ส่วนใหญ่ถ้าคุณใช้ไฟล์ขนาดใหญ่หรือใช้ python เพื่อควบคุมสถานี
มิฉะนั้นส่วนใหญ่ใช้หรือexit()quit()
sys.exit เป็นวิธีบัญญัติของการออก
ภายในเพียงแค่ยกsys.exit SystemExitอย่างไรก็ตามการโทรsys.exitนั้นมีความหมายมากกว่าการโทรSystemExitโดยตรง
os.exit เป็นการเรียกระบบระดับต่ำที่ออกโดยตรงโดยไม่เรียกตัวจัดการการล้างข้อมูลใด ๆ
quitและexitมีอยู่เพื่อให้วิธีง่าย ๆ ในการออกจากพรอมต์ Python นี่สำหรับผู้ใช้ใหม่หรือผู้ใช้ที่ป้อนพรอมต์ Python โดยไม่ตั้งใจและไม่ต้องการรู้ไวยากรณ์ที่ถูกต้อง พวกเขามีแนวโน้มที่จะลองพิมพ์หรือexit quitแม้ว่าสิ่งนี้จะไม่ออกจากล่าม แต่อย่างน้อยก็มีข้อความที่บอกให้พวกเขารู้วิธี:
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$
นี่เป็นเพียงแฮ็คที่ใช้ความจริงที่ล่ามพิมพ์การ__repr__แสดงออกใด ๆ ที่คุณป้อนที่พรอมต์
os.abort()