ดูเหมือนว่างูใหญ่สนับสนุนคำสั่งต่าง ๆ มากมายเพื่อหยุดการทำงานของสคริปต์
ตัวเลือกที่ฉันได้พบคือ: 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()