ในหลามมีสองฟังก์ชั่นในทำนองเดียวกันการตั้งชื่อและexit()
sys.exit()
อะไรคือความแตกต่างและเมื่อใดที่ฉันควรใช้อันอื่น?
ในหลามมีสองฟังก์ชั่นในทำนองเดียวกันการตั้งชื่อและexit()
sys.exit()
อะไรคือความแตกต่างและเมื่อใดที่ฉันควรใช้อันอื่น?
คำตอบ:
exit
เป็นผู้ช่วยสำหรับเชลล์แบบโต้ตอบ - sys.exit
มีไว้สำหรับใช้ในโปรแกรม
site
โมดูล (ซึ่งนำเข้าโดยอัตโนมัติระหว่างการเริ่มต้นยกเว้นถ้า-S
ตัวเลือกบรรทัดคำสั่งจะได้รับ) เพิ่ม constant หลาย ๆ ไปในตัว namespace (เช่นexit
) พวกเขาจะมีประโยชน์สำหรับเปลือกล่ามโต้ตอบและไม่ควรนำมาใช้ในโปรแกรม
เทคนิคที่พวกเขาทำส่วนใหญ่เหมือนกัน: SystemExit
การเพิ่ม sys.exit
ทำเช่นนั้นในsysmodule.c :
static PyObject *
sys_exit(PyObject *self, PyObject *args)
{
PyObject *exit_code = 0;
if (!PyArg_UnpackTuple(args, "exit", 0, 1, &exit_code))
return NULL;
/* Raise SystemExit so callers may catch it or clean up. */
PyErr_SetObject(PyExc_SystemExit, exit_code);
return NULL;
}
ขณะที่exit
ถูกกำหนดในsite.pyและ_sitebuiltins.pyตามลำดับ
class Quitter(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return 'Use %s() or %s to exit' % (self.name, eof)
def __call__(self, code=None):
# Shells like IDLE catch the SystemExit, but listen when their
# stdin wrapper is closed.
try:
sys.stdin.close()
except:
pass
raise SystemExit(code)
__builtin__.quit = Quitter('quit')
__builtin__.exit = Quitter('exit')
โปรดทราบว่ามีตัวเลือกทางออกที่สามคือos._exitซึ่งออกโดยไม่เรียกใช้ตัวจัดการการล้างการล้างบัฟเฟอร์ stdio ฯลฯ (และควรใช้ในกระบวนการย่อยหลังจาก a fork()
) เท่านั้น
from module import *
จริงๆ
ถ้าฉันใช้exit()
ในรหัสและเรียกใช้ในเชลล์มันจะแสดงข้อความถามว่าฉันต้องการที่จะฆ่าโปรแกรมหรือไม่ มันน่ารำคาญจริงๆ
ดูที่นี่
แต่sys.exit()
จะดีกว่าในกรณีนี้ มันปิดโปรแกรมและไม่ได้สร้างกล่องโต้ตอบใด ๆ
sys.exit()
ควรใช้ภายในโปรแกรม
-S
จะใช้ วิธีที่จะทำให้การทำงานแม้จะมีคือการระบุ-S
from sys import *