Přestože je IDLE poměrně jednoduché IDE, díky tomu, že je distribuován přímo z Pythonem, je docela často používaný. Na této stránkce najdete popis některých jeho vlastností.
Spustíte-li automatický test vytvořený pomocí modulu unittest
v IDLE, dostanete následující výstup, ačkoli všechny testy proběhly správně:
.. --------------------------------------------------------------------- Ran 2 tests in 0.015s OK Traceback (most recent call last): File "M:/WINXPP/Plocha/test1_readclassification/test_readClassificationFromFile.py", line 79, in <module> unittest.main() File "C:/Python32/lib/unittest/main.py", line 124, in __init__ self.runTests() File "C:/Python32/lib/unittest/main.py", line 272, in runTests sys.exit(not self.result.wasSuccessful()) SystemExit: False
Dojde k výpisu výjimky SystemExit
, což trochu kazí fakt, že váš kód prošel všemi testy. Problém je v tom, že když unittest.main()
dokončí všechny testy, zavolá sys.exit(exitcode)
, čímž chce signalizovat případnému (třeba) shellovskému skriptu, zda testy proběhly OK nebo ne. Volání sys.exit()
vyhazuje výjimku SystemExit
, která ukončí aktuálně běžící pythonovský process, viz
http://docs.python.org/py3k/library/sys.html?highlight=sys.exit#sys.exit.
Protože IDLE samotný běží v hlavním vlákně a skripty spouští pravděpodobně ve stejném vlákně, voláním sys.exit()
uvnitř skriptu by se za normálních okolností ukončil i IDLE. Proto IDLE výjimku SystemExit
odchytává, ale aby zcela nezanikla, prostě ji vypíše. Je to standardní chování IDLE, viz popis třebe zde:
Pokud vám výpis této výjimky vadí, lze to řešit několika způsoby: (i) nepoužívejte IDLE ke spouštění unit testů , (ii) odchyťte si výjimku SystemExit
sami, nebo (iii) využijte argument exit
funkce unittest.main()
.
Poslední řešení je pro naše účely asi nejvodnější. Od verze 2.7 Pythonu můžete funkci unittest.main()
volat s parametrem exit=False
, který potlačí volání sys.exit()
, tedy takto:
if __name__=='__main__': unittest.main(exit=False)Pak by měl výpis testů proběhnout očekávaným způsobem.