====== IDLE ======
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í.
===== Spouštění unittestů v IDLE =====
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
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:
* [[http://stackoverflow.com/questions/2457068/using-idle-to-run-python-pyunit-unit-tests]]
* [[http://coding.derkeiler.com/Archive/Python/comp.lang.python/2003-11/0239.html]]
* [[http://www.daniweb.com/software-development/python/threads/321299/problem-running-unittest]]
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.