Šķiet, ka python atbalsta daudzas dažādas komandas, lai apturētu skripta izpildi.
Izvēles es esmu atradis: quit()
, exit()
, sys.exit()
, os._exit()
.
Vai es kādu esmu izlaidis? Kāda starp tām ir atšķirība? Kādos gadījumos jūs varētu izmantot katru no tām?
Ļaujiet man sniegt informāciju par tiem:
quit()
aizkulisēs izraisa `SystemExit
izņēmumu. Turklāt, ja to izdrukāsiet, tiks parādīts ziņojums:
>>>> print (quit)
Izmantojiet quit() vai Ctrl-Z plus Return, lai izietu no sistēmas
>>>>
Šī funkcionalitāte tika iekļauta, lai palīdzētu cilvēkiem, kuri neprot Python. Galu galā, viena no visdrīzākajām lietām, ko iesācējs mēģinās darīt, lai izietu no Python, ir quit
ierakstīšana.
Tomēr quit
nevajadzētu izmantot ražošanas kodā. Tas ir tāpēc, ka tas darbojas tikai tad, ja ir ielādēts modulis site
. Tā vietā šo funkciju vajadzētu izmantot tikai interpretatorā.
Exit()
ir quit
aizstājvārds (vai otrādi). Tās pastāv kopā tikai tāpēc, lai padarītu Python lietotājam draudzīgāku. Turklāt arī tas izdrukāšanas gadījumā sniedz ziņojumu:
>>>> print (exit)
Lai izietu, izmantojiet exit() vai Ctrl-Z plus Return
>>>
Tomēr, tāpat kā quit
, arī exit
tiek uzskatīts par nepareizu lietošanai ražošanas kodā, un to vajadzētu rezervēt izmantošanai interpretatorā. Tas ir tāpēc, ka arī tas ir atkarīgs no site
moduļa.
sys.exit()
fona režīmā izraisa SystemExit
izņēmumu. Tas nozīmē, ka šajā ziņā tas ir tas pats, kas quit
un exit
. Tomēr atšķirībā no šiem diviem gadījumiem sys.exit
tiek uzskatīts par lietderīgu izmantot ražošanas kodā. Tas ir tāpēc, ka sys
modulis vienmēr būs pieejams.
os._exit()
atstāj programmu, **neizsaucot tīrīšanas apstrādes programmas, neveicot stdio buferu izskalošanu utt. Tādējādi tas nav standarta veids, kā iziet no programmas, un to vajadzētu izmantot tikai īpašos gadījumos. Visizplatītākais no tiem ir ar os.fork
9 izveidotajā(-os) atvasinātajā(-os) procesā(-os).Ņemiet vērā, ka no četrām minētajām metodēm tikai šī ir unikāla.
Kopumā visas četras metodes izbeidz programmu. Tomēr pirmās divas tiek uzskatītas par tādām, kuras nav lietderīgi izmantot ražošanas kodā, bet pēdējā ir nestandarta, netīrs veids, ko izmanto tikai īpašos scenārijos. Tāpēc, ja vēlaties normāli iziet no programmas, izmantojiet trešo metodi: sys.exit
.
Vai arī, manuprāt, vēl labāk, jūs varat vienkārši tieši darīt to, ko sys.exit
dara aizkulisēs, un palaist:
raise SystemExit
Šādā veidā jums nav nepieciešams vispirms importēt sys
.
Tomēr šī izvēle ir tikai stila izvēle un ir tikai jūsu ziņā.
Funkcijas* quit()
, exit()
un sys.exit()
darbojas vienādi: tās izraisa SystemExit
izņēmumu. Tātad nav nekādu atšķirību, izņemot to, ka sys.exit()
ir pieejams vienmēr, bet exit()
un quit()
ir pieejami tikai tad, ja ir importēts site
modulis.
os._exit()
funkcija ir īpaša, tā izbeidz darbību uzreiz, neizsaucot nekādas tīrīšanas funkcijas (piemēram, tā neizpludina buferus). Tā ir paredzēta ļoti specializētiem lietošanas gadījumiem... būtībā tikai pēc os.fork()
izsaukuma.
REPL lietojiet exit()
vai quit()
.
Skriptos izmantojiet sys.exit()
vai raise SystemExit()
, ja vēlaties.
Izmantojiet os._exit()
, lai pēc izsaukuma os.fork()
izietu no procesiem.
Visas šīs funkcijas var izsaukt bez argumentiem vai arī var norādīt izejas statusu, piemēram, exit(1)
vai raise SystemExit(1)
, lai izietu ar statusu 1. Ņemiet vērā, ka portatīvajām programmām ir ierobežots izejas statusa kods 0-255 diapazonā, ja daudzās sistēmās raise SystemExit(256)
tiks saīsināts, un jūsu process faktiski beigsies ar 0 statusu.
* Patiesībā quit()
un exit()
ir izsaucami instance objekti, bet, manuprāt, tos var saukt par funkcijām.
os._exit()
:
exit(0)
:
exit(1)
:
sys.exit()
:
quit()
:
Būtībā tie visi dara vienu un to pašu, tomēr tas ir atkarīgs arī no tā, kādam nolūkam jūs to darāt.
Es nedomāju, ka jūs kaut ko izlaidāt, un es ieteiktu pierast pie quit()
vai exit()
.
Jūs varētu izmantot sys.exit()
un os._exit()
galvenokārt tad, ja izmantojat lielus failus vai ja termināļa vadībai izmantojat python.
Pretējā gadījumā galvenokārt izmantojiet exit()
vai quit()
.