ãªããžã§ã¯ãæåã®è§£èª¬ãŸã§çµãããŸããã®ã§ãæ¬é£èŒã§æ±ãå 容ã¯ã»ãŒçµããã§ããä»åããã¯ä»ãŸã§ã®é£èŒã§è©±ããªãã£ãå 容ã«ã€ããŠåãæ±ããŸãã
ä»åãšæ¬¡åã¯ãäŸå€åŠçãã«ã€ããŠæ±ããŸãããŸãäŸå€åŠçãã©ã®ãããªãã®ãªã®ããæ³åãã€ããªããããããã£ããããšæããŸãã®ã§ãç°¡åã«æŠèŠã説æããããšæããŸãããã®åŸãã©ã®ããã«ããŠPythonã§äŸå€åŠçãå®çŸããããæ±ããŸãããªããäŸå€ã¯ãšã©ãŒãäŸå€åŠçã¯ãšã©ãŒãã³ããªã³ã°ãšåŒã°ããããšãå€ãã§ãã
ãäŸå€ãã£ãŠãªã«?
äŸå€åŠçã¯ååãèããŠãããããã«ãäŸå€(ãšã©ãŒ)ãã«å¯ŸããåŠçã§ãããã®äŸå€ã¯ç°¡åã«èšã£ãŠããŸãã°ããæåŸ ãããªãåããã®ããšã§ãããšãã°0ã§ã®é€ç®ãªã©ããããããŸããç®æ°ãæ°åŠã§åŠãã ããšããããããããŸããããã0ã§äœããå²ãããšããã®ã¯æ°åŠã§ã¯ãã£ãŠã¯ãããªãã«ãŒã«ã§ãããã®ãããPythonã§ããã®åŠçãå®è¡ããããšãããšãšã©ãŒã«ãªããŸãã
詊ãã«ã¿ãŒããã«ã§å®è¡ããŠã¿ãŸããããã以äžã®ãããªãšã©ãŒè¡šç€ºã確èªã§ããŸãã
>>> 5 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
ãšã©ãŒãèªãã§ããããšãããããã«ã0ã«ããdivision(å²ãç®)ãmodulo(å°äœ)ã«ããZeroDivisionErrorãçºçããŠããããšãããããŸãã
ãã®ãšã©ãŒãçºçãããšåŠçãäžæãããŠããŸããŸããããã確èªããŠã¿ãŸãã
def test():
print(1)
5 / 0
print(2)
test()
äžèšã®ããã°ã©ã ãå®è¡ããŠã¿ãŸãã
# python test.py
1
Traceback (most recent call last):
File "test.py", line 6, in <module>
test()
File "test.py", line 3, in test
5 / 0
ZeroDivisionError: integer division or modulo by zero
åºåãããã®ã¯1ã ãã§ããã2ã¯åºåãããŠããŸãããã2ãåºåãããåã«ã5ã0ã§å²ãããšããåŠçããããããã§ãšã©ãŒãçºçããŠprint(2)ãå®è¡ããåã«åŠçãæã¡åã£ãŠããŸã£ãŠããããã§ãããã®ãæ°åã0ã§å²ãããšããåŠçã¯ããããããã°ã©ã ãšããŠå®è¡ãã¹ãã§ã¯ãããŸãããäžèšã®ãããªçŽæ¥çãªãã°ã³ãŒããæžãããšã¯ãã¡ãããããšãã°ã©ã®ãããªæ°åãå ¥ã£ãŠãããããããªã倿°aã倿°bã§å²ãå Žåã¯ãå²ãåã«bã®å€ã0ã§ãªããããã§ãã¯ãã0ã®å Žåã¯å²ããªãããã«ãããªã©ã®å¯ŸåŠãå¿ èŠã§ãã
ãã®ããã«ããçš®ã®ãšã©ãŒã¯å¿ ãçºçããªãããã«ãã¹ããã®ã ãšãããŸãããã ãæ³šææ·±ãã³ãŒããæžãããšã«ãããã¹ãŠã®ãšã©ãŒãé¿ããããããšãããšãããã¯ééã£ãŠããŸããããšãã°ããµãŒããŒããããŒã¿ãåã£ãŠããããšãããããã¯ãŒã¯ã䜿ã£ãããã°ã©ã ãäœæããå ŽåãããµãŒããŒã«æ¥ç¶ã§ããããã¯èªåãæ³šææ·±ãã³ãŒããæžããã©ãããšããããããå®è¡ãããã·ã³ããããã¯ãŒã¯ã«ããããç¹ãã£ãŠããããã€ãªãã£ãŠããŠããµãŒããžã®ãªãŒãã£ããªãã£ã¯ãããããšãã£ãããšãªã©ã«äŸåããŸãã
ãã®ãããªåŠçãããå Žåã¯ãäŸå€åŠçãè¡ãããšãå¿ é ã§ãã
äŸå€åŠçã®ãããã
äŸå€ã«å¯ŸããäŸå€åŠçãå¿ èŠãªããšã¯ããã£ãŠããã ãããšæããŸããããã§ã¯ãã®äŸå€åŠçãã©ã®ããã«ããŠå®è£ ããããšãããæŠå¿µããåŠã³ãããšæããŸãã
ãŸããäŸå€åŠçã¯Python以åããããææ³ã§ããäŸå€ã¯èšèªã«é¢ä¿ãªãçºçããã®ã§åœç¶ã§ããããã ããã®äŸå€åŠçã®å®è£ ã¹ã¿ã€ã«ã«ã¯å€§ãŸãã«åããŠ2ã€ãããŸããã²ãšã€ãã¯Cèšèªãªã©ã§äœ¿ããããè¿ãå€ãã§ãã¯ãã䜿ããã®ã§ãããããŠ2ã€ãã¯Javaãªã©ã§äœ¿ããããtry/catchãã䜿ããã®ã§ããPythonã¯JavaãšåããåŸè ã䜿ãã®ã§ãããåè ãç¥ã£ãŠããå¿ èŠãããã®ã§èª¬æããŸãã
Cã®ãããªãè¿ãå€ãã§ãã¯ãã®äŸå€åŠçã§ãããæŽå²çã«ã¯ãã¡ãã®ã»ããå€ãã§ãããã®æ¹åŒãç°¡åã«èšã£ãŠããŸããšããã颿°ãåŒã³åºããæã®è¿ãå€ããäŸå€ã®å€ã§ãªããããã§ãã¯ãããšãããã®ã§ãã
以äžã®å³ãèŠãŠãã ããã
ããã§ã¯é¢æ°Aãããããã®é¢æ°ãåŒã³åºããŠããŸãã颿°Aã¯ãããåŠçã«å€±æããããè¿ãå€ãšããŠ-1ãè¿ãããšããåãããããšæ±ºããããŠããŸããèªåã§ãã®ã«ãŒã«ãäœãããšãããã§ããããããã§ã«ååšããŠãã颿°ã®ããã¥ã¡ã³ãã«ããæžãããŠããããšããããŸãããã®å Žåããã®é¢æ°ã䜿ã£ãéã«è¿ãå€ãååŸãããã®è¿ãå€ã-1ã§ãããã©ããã確èªããŸããä»®ã«ãã®å€ã-1ã§ããã°é¢æ°Aã¯åŠçã«å€±æããŠããã®ã§ãåŠçã®äžæãªãå¥ã®åé¿çãªããå¿ èŠã§ããäžèšäŸã§ã¯ifæã®äžã§äŸå€åŠçããã£ãŠããŸãããããã§gotoã䜿ã£ãŠäŸå€åŠçãè¡ãå ŽæãŸã§ãžã£ã³ãããŠããŸããšããã®ãããããæ¹æ³ã§ãã
颿°ã®è¿ãå€ã®ãã§ãã¯ä»¥å€ã«ãã颿°ã®åŒæ°ã«ããã€ã³ã¿ãšåŒã°ããŠããåç §ããæž¡ããããã«é¢æ°å ã§ç¹å®ã®å€ãã»ãããããšããæ¹æ³ããããŸãã颿°ãåŒã³åºããåŽã§ãã®ãã€ã³ã¿ã®å€ããã§ãã¯ããã°ãåŒæ°ãšåããæåããã倱æããããããããŸãããã®ãããªåœ¢ã§ãã€ã³ã¿ã䜿ããšãããCç¹æãªã®ã§ãæ¯èŒçæ°ããé«çŽèšèªãã䜿ããªã人ã«ã¯æ £ããªãäœ¿ãæ¹ããšæããŸãããåºæ¬çã«ã¯é¢æ°ã®è¿ãå€ã®ãã§ãã¯ãšå€§å·®ã¯ãããŸãããããããCãªã©ã§äœ¿ããã代衚çãªäŸå€åŠçæ¹åŒã§ãã
次ã«Javaã§äœ¿ãããtry/catchã«ããäŸå€åŠçã§ããããã°ã©ãã³ã°èšèªã®ææ³ãšããŠtry/catchæ¹åŒã®äŸå€åŠçããµããŒããããŠããå Žåã«å©çšå¯èœã§ãPythonãããããµããŒãããŠããŸããèªåã§ã³ãŒããæžãå Žåã¯Cæ¹åŒã®äŸå€åŠçãå®è£ ããããšãå¯èœã§ãããã»ãã®äººã®ã³ãŒããå©çšããå Žåã¯ãã®äŸå€åŠçãtry/catchã§å¯ŸåŠããå¿ èŠãããããªããã€Cã®ã¹ã¿ã€ã«ã§äŸå€åŠçã䜿ããšã³ãŒããç ©éã«ãªãã®ã§ãç¹ã«çç±ããªããããã¯try/catchã«æ²¿ã£ãäŸå€åŠçã䜿ã£ãã»ãããããšæããŸãã
ãŸãããŽãã£ãŽãã£èšããããå ã«ãã©ã®ããã«äœ¿ããèŠãŠã¿ãŸãããã以äžã®å³ãèŠãŠãã ããã
try/catchæ¹åŒã¯ç°¡åã§ããäŸå€ãçºçããå¯èœæ§ãããããã®å¯ŸåŠãå¿ èŠãªç®æãtryã¹ã³ãŒãã§å²ã¿ãŸãããã®ã¹ã³ãŒãå ã§ãšã©ãŒãçºçãããšããã®åŸãã«ããcatchã¹ã³ãŒããŸã§ãžã£ã³ãããŸãããšã©ãŒãçºçããããšã®tryã¹ã³ãŒãå ã®ã³ãŒãã¯å®è¡ãããªãã®ã§æ³šæããŠãã ãããäžèšå³ã§èšããšãåŠç2ã®åã«ãšã©ãŒãçºçãããšãåŠç2ã¯å®è¡ãããŸããã
ãŸããtryã¹ã³ãŒãã®äžã§ãšã©ãŒãçºçããªãã£ãå Žåã¯catchã®ã¹ã³ãŒãå ã®åŠçã¯å®è¡ãããŸãããtryã®äžã§ãšã©ãŒãèµ·ããããšèµ·ããŸããšãtry/catchã®åŸã«ããã³ãŒãã¯å®è¡ãããŸãããããšã©ãŒãçºçããå Žåã«åŠçãæã¡åãããã®ã§ããã°ãcatchã®äžã§ããã°ã©ã ãçµäºããããªããreturnã§é¢æ°ãæããŠããŸããªãããå¿ èŠããããŸãã
try/catchã«ã€ããŠã¯å®éã«Pythonã§äœ¿ãæ¹ãåŠã¶ãšçè§£ã§ãããšæããŸãã®ã§ã詳ãã話ãããã®ã¯ããã§ã¯æ§ããŠã䜿ããªããåŠãã§ãããããšæããŸãã
Pythonã®try/catchã䜿ã£ãŠã¿ã
Pythonã®try/catchã¯ç°¡åã§ãããŸãäžçªã·ã³ãã«ãªäœ¿ãæ¹ã¯ä»¥äžã®ãããªãã®ã«ãªããŸãã
print('1: outside of try/catch')
try:
print('2: inside of try scope')
5 / 0
print('3: inside of try scope')
except Exception:
print('4: inside of except(catch) scope')
print('5: outside of try/catch')
try/catchã®catchã¯Pythonã§ã¯exceptã«ãªã£ãŠããŸããããã以å€ã¯å çšèª¬æãããã®ãšãŸã£ããåãã§ããtryã®äžã§ãšã©ãŒãçºçããã°ããã以åŸã®tryå ã®åŠçãæã¡åã£ãŠexceptã«ãžã£ã³ãããŸããä»åã¯ãããš5/0ã§ãšã©ãŒãçºçãããŠããŸãã
ãããå®è¡ãããšä»¥äžã®ããã«ãªããŸãã
# python test.py
1: outside of try/catch
2: inside of try scope
4: inside of except(catch) scope
5: outside of try/catch
èŠãŠãããããã«ã5/0ã®ãšã©ãŒçºçåŸã®ã³ãŒãã§ããprint('3: inside of try scope') ã¯å®è¡ãããã«ãexceptã«ãžã£ã³ãããŠãã®äžã®åŠçã宿œããŠããŸãã詊ãã«ãã®5 / 0ãã³ã¡ã³ãã¢ãŠãããŠå®è¡ããŠã¿ãŸãã
print('1: outside of try/catch')
try:
print('2: inside of try scope')
# 5 / 0
print('3: inside of try scope')
except Exception:
print('4: inside of except(catch) scope')
print('5: outside of try/catch')
ãããå®è¡ãããšä»¥äžã®ããã«ãªããŸãã
python test.py
1: outside of try/catch
2: inside of try scope
3: inside of try scope
5: outside of try/catch
å ã»ã©ãšç°ãªãããšã©ãŒãçºçããŠããªãã®ã§print('3: inside of try scope')ãå®è¡ãããŠããŸãããŸããšã©ãŒãçºçããªãã£ãã®ã§ãexceptå ã®åŠçã¯åŒã³ã ããã'4: inside of except(catch) scope'ã®è¡šç€ºããªããªã£ãŠããããšãããããŸãããããŠãtry/catchã®å€ã«ãã'1: outside of try/catch'ãš'5: outside of try/catch'ã¯åžžã«å®è¡ãããŠããŸãã
ãããPythonã®ç°¡åãªäžçªç°¡åãªäŸå€åŠçã®æ¹åŒã§ããPythonã§ã¯ãã现ãã詳现ãªäŸå€åŠçã®å®è£ ãè¡ãããšãå¯èœã§ãããç§ã¯æ£çŽãªãšããããã»ã©è€éãªãã®ã¯å©çšããŸããããªããªãå€§èŠæš¡ãªã³ãŒããæžããšãããããå°ããã¹ã¯ãªãããæžãããã«Pythonã䜿ã£ãŠããããã§ãã
ãã以åŸã®ãã¯ããã¯ã¯å¿ é ã§ã¯ãªãã®ã§ãããç¥ã£ãŠãããšãªã«ããšäŸ¿å©ãªã®ã§èå³ããã人ã¯åŒãç¶ãèªãã§ãã ããããŸããJavaãªã©ã§ã¯ãã®ãããã®ãã¯ããã¯ã¯ããªã䜿ãã®ã§ãæçµçã«ã»ãã®èšèªã䜿ãäºå®ããã人ã¯èªãã ã»ãããããããããŸããã
äŸå€Exceptionã¯ã©ã¹ãšãã®åã¯ã©ã¹
ååãŸã§ã«ã話ããç¶æ¿ãæãåºããŠãã ãããç¶æ¿ã§ã¯ã芪ã¯ã©ã¹ã«å€§ãŸããªå®è£ ãè¡ããåã¯ã©ã¹ã«ãã詳现ãªå®è£ ãããã®ã§ãããããšãã°èŠªã¯ã©ã¹ããè»ã¯ã©ã¹ãã ãšãããšãåã¯ã©ã¹ã¯ãä¹çšè»ã¯ã©ã¹ãããã©ãã¯ã¯ã©ã¹ããã¹ããŒãã«ãŒã¯ã©ã¹ããšãã£ãæãã«ãªããŸãã
ãã®ç¶æ¿ã¯äŸå€åŠçã«ãé¢ãã£ãŠããŸããå ã»ã©æ·±ã説æãªãã«exceptã以äžã®ããã«äœ¿ããŸããã
except Exception:
print('4: inside of except(catch) scope')
exceptã®åŸã«ããExceptionã¯ãå®ã¯äŸå€åŠçã®ããã®ã¯ã©ã¹ã§ãããã®Exceptionã¯ç¶æ¿ãããã¯ã©ã¹ãããŸããŸãããããšãã°IO(å ¥åºå)ã®ãšã©ãŒãæ±ãããã®IOErrorãªã©ããããŸããããã¯ã¡ããã©Exceptionãå ã»ã©ã®èª¬æã®è»ã¯ã©ã¹ã«ããããIOErrorãä¹çšè»ã¯ã©ã¹ã«ããããŸãã
ãã®ãšã©ãŒã¯ã©ã¹ãšãã®äœ¿ãæ¹ã«ã€ããŠèŠããŠãããŠãããããããšã¯3ã€ãããŸãã ã²ãšã€ãã¯çºçãããšã©ãŒã®çš®é¡ã«å¿ããŠåŒã³åºããããšã©ãŒã®ã¯ã©ã¹ãç°ãªããšããããšã§ããããšãã°ãäžèšã®IOError ã¯åœç¶ãªããIOç³»ã®åŠçã倱æããéã«å©çšãããŸããããŸã£ããé¢ä¿ãªããšã©ãŒã§ãã0ã«ããé€ç®ã§ã¯å©çšãããŸããã
ãµãã€ãã¯exceptã«èŠªã¯ã©ã¹ãæå®ããå Žåã¯åã¯ã©ã¹ã®ãšã©ãŒã察å¿ã§ãããšããããšã§ããããšãã°IOErrorã®äŸå€ã¯èŠªã¯ã©ã¹ã§ããExceptionã§ã察å¿å¯èœã§ãã
ãããŠãæåŸã¯ãã®ãšã©ãŒãå©çšããexceptã¯è€æ°æžãããšãã§ãããšããç¹ã§ããè€æ°æžããå Žåã¯å é ããé ã«ãã§ãã¯ããŠãããæåã«ãããããåŠçãå®è¡ãããŸããã©ã®exceptããããããªããã°äŸå€åŠçãå®è¡ã§ããã«ãšã©ãŒã§åæ¢ããŠããŸããŸãã
ãã£ããã³ãŒããæžããªãã確ãããŠã¿ãŸãããããŸãã以äžã®ã³ãŒãããããŸããexceptã2ã€ãããããããIOErrorãšExceptionãšèšèŒãããŠããŸããã2ã€ã ãã§ãªãã奜ããªã ãexceptãæžãããšãã§ããŸãã
try:
f = open('helloworld.txt', 'r')
except IOError:
print('io error')
except Exception:
print('exception')
ä»åã¯ååšããªããã¡ã€ã«helloworld.txtãèªã¿èŸŒãããšããŠãšã©ãŒãçºçãããŸããããã¯IOErrorãçºçããŸãããã£ããå®è¡ããŠã¿ãŸãããã
# python test.py
io error
衚瀺ããã'io error'ãèŠãŠãããããã«ã1çªç®ã®exceptãåŒã³åºãããŠããŸããã 'exception'ãšãã衚瀺ããªãããšããã2çªç®ã®exceptã¯åŒã³åºãããŠããªãããšãããããŸããããã¯ãæåã«ãããããåŠçãå®è¡ãããããšããä»çµã¿ãããããã§ãã
次ã«çºçããããšã©ãŒã0é€ç®ã«å€ããŠã¿ãŸãã
try:
5 / 0
except IOError:
print('io error')
except Exception:
print('exception')
ãããå®è¡ãããšä»¥äžã®ããã«ãªããŸãã
# python test.py
exception
å ã»ã©ãšç°ãªãã2çªç®ã®exceptãåŒã³åºãããŠããŸããããã¯1çªç®ã®exceptããçºçãããšã©ãŒã«ãããããŠããããç¡èŠãããããã§ããä»åã¯IOErrorã1çªç®ã«æå®ãããŠããŸããã5/0ã§çºçãããšã©ãŒã¯IOErrorã§ã¯ãªãZeroDivisionErrorãªã®ã§ããããããŸããããã ã2çªç®ã®Exceptionã¯ZeroDivisionErrorã®èŠªã¯ã©ã¹ãªã®ã§ããããã2çªç®ã®exceptãåŒã³åºãããŠããŸãã
ãŸããå ã»ã©èšã£ãããã«ãã©ã®exceptããããããªããšãšã©ãŒã«ãªããŸãã詊ãã«2çªç®ã®exceptãåã£ãŠã¿ãŸãã
try:
5 / 0
except IOError:
print('io error')
print(1)
ãããå®è¡ãããšä»¥äžã®ããã«ãªããŸãã
# python test.py
Traceback (most recent call last):
File "test.py", line 2, in <module>
5 / 0
ZeroDivisionError: integer division or modulo by zero
æåŸã®'print(1)'ã«å¯Ÿå¿ããåºåããªãããšãããã°ããŒãã«ã¬ãã«ã§ããã°ã©ã ã®åŠçãæã¡åãããŠããããšãããããŸãããçºçãããšã©ãŒã®çš®é¡ã«ãã£ãŠããŸããŸãªäŸå€åŠçãåãæ¿ããå¿ èŠãããå Žåã¯ããã®ããã«è€æ°ã®exceptã䜿ã£ãŠäŸå€åŠçãå®è£ ãããšç°¡åã§ãã
ãªããå ã»ã©èšã£ãããã«åã®exceptã«ãããããããåŸã®exceptã¯ãã§ãã¯ãããŸããããã®ããã以äžã®ã³ãŒãã§2çªç®ã®except IOErrorãåŒã³åºãããããšã¯ãããŸããã
except Exception:
print('exception')
except IOError:
print('io error')
åã®exceptã«ãªãã«ã§ãããããããã®ãæžããŠããŸããšãäŸå€ã¯ãã¹ãŠããã§åŠçãããŠããŸããŸããã€ãŸããåã®exceptã»ã©è©³çްãªãã®ãæžããåŸåã»ã©å€§ããªç¯å²ãã«ããŒã§ããã¯ã©ã¹ãæžãå¿ èŠããããšããããšã§ãã
ã©ã®ãããªäŸå€åŠçããããã¯ä»¥äžã®ããã¥ã¡ã³ããåç §ãã ããã
ä»åã¯äŸå€åŠçã®åºæ¬ã«ã€ããŠåŠã³ãŸãããæ¥é±ã¯ãã®ç¶ããæ±ããŸãã
å·çè
玹ä»äŒè€è£äž(ITO Yuichi)ã·ã¹ã³ã·ã¹ãã ãºã§ã®æ¥åãšå€§åŠã§ã®ç 究掻åã§ã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ã«6幎é¢ãããå°éã¯L2/L3 Switching ãšããŒã¿ã»ã³ã¿ãŒé¢é£æè¡ããã³SDNãTACãšããŠã·ã¹ã³é¡§å®¢ã®ãã¯ãã«ã«ãµããŒãæ¥åã«åŸäºã瀟å åãã®ãœãããŠã§ã¢é¢é£ã®ãã¬ãŒãã³ã°ããã³ããŒã¿ã»ã³ã¿ãšSDNé¢ä¿ã®å€éšè¬æŒãªã©ãè¡ãã ããšããšä»®æ³ãããã¯ãŒã¯é¢é£æè¡ã®ç ç©¶éçºã«åŸäºããŠããããšãããããããã¯ãŒã¯ã ãã§ãªãããã°ã©ãã³ã°ãLinuxé¢é£æè¡ã«ã粟éãCisco瀟å å€åãã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ããŒã«ã®éçºããè¶£å³ã§é³å£°åæåŠçã®ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ãéçºã Cisco CCIE R&S, Red Hat Certified Engineer, Oracle Java Gold,2009幎床 IPA æªèžãããžã§ã¯ãæ¡æ 詳现(è±èª)ã¯ãã¡ã |
|---|

