ã¾ãæ£ããä¾å¤ã使ãã¾ãããã¨ãã話ã§ãããå½ããåã§ããã¨æã人ã¯èªã¾ãªãã¦è¯ãã§ã!!
åå£ä¸
ä¾å¤ã«éãããèªåãããã°ã©ãã³ã°ãããã«ããã£ã¦å¿æãã¦ãããã¨ã®ä¸ã¤ã«ãèª å®ãªããã°ã©ãã³ã°ã¨ããã®ããããæè¿ãæãã¤ããã®ã§åæã«ååãã¤ãã¦ã¿ããã ãã©ã
ä½ãã£ã¤ã¼ã¨ãä½ãèµ·ãã£ã¦ããããã§ããã¨ãããããã使ããã¼ã¿ã¯ããã§ããã¨è¨ã£ããã®ããã¡ãã¨ä¼ããã»ä¼ããããã«ãã¦ãããã¨ããå¿æ§ãã§ã*1ã
ãã®ä¸ã§ãã¨ã«ããä¾å¤ã¯ãã¡ãã¨æ±ã£ã¦æ¬²ããäºã®ä¸ã¤ãªã®ã§ãã¡ãã£ã¨èªåã¯ãã¼ãã¦ããã¨ããã®ãä¸ã«æ®ãã¦ããã®ãè¯ãããªãã¨æã£ã次第ã§ãã
ä¾å¤ã¯ããããã®éè¦ãªãã¼ã¿ãæã£ã¦ãã
æ¦ããããã¸ãã®æ å ±ã¯ä¾å¤æ©æ§ãæã£ã¦ãè¨èªãªãæä¾ãã¦ãããã¨æãã¾ãã
- ä¾å¤ã¯ã©ã¹*2
- ä¾å¤çºçæã®ã¡ãã»ã¼ã¸
- ã¹ã¿ãã¯ãã¬ã¼ã¹ï¼ã¾ãã¯ããã¯ãã¬ã¼ã¹ï¼
Ruby ã ã£ãã class Exception ãè¦ãã°ã©ã®ãããªãã¼ã¿ãåããããããã¾ããã
ã³ã¼ããè¦ãã»ããæ©ãããªã
require 'fileutils' class Hoge def fuga FileUtils.rm('/tmp/hoge/fuga') end end begin Hoge.new.fuga rescue => e puts "e.class => #{e.class}" puts "e.message => #{e.message}" puts "e.backtrace => #{e.backtrace}" end
sugamasao@GRAM% ruby hoge.rb e.class => Errno::ENOENT e.message => No such file or directory - /tmp/hoge/fuga e.backtrace => ["/Users/sugamasao/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/fileutils.rb:1406:in `unlink'", "/Users/sugamasao/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/fileutils.rb:1406:in `block in remove_file'", "/Users/sugamasao/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/fileutils.rb:1411:in `platform_support'", "/Users/sugamasao/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/fileutils.rb:1405:in `remove_file'", "/Users/sugamasao/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/fileutils.rb:785:in `remove_file'", "/Users/sugamasao/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/fileutils.rb:563:in `block in rm'", "/Users/sugamasao/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/fileutils.rb:562:in `each'", "/Users/sugamasao/.rvm/rubies/ruby-1.9.3-head/lib/ruby/1.9.1/fileutils.rb:562:in `rm'", "hoge.rb:5:in `fuga'", "hoge.rb:10:in `<main>'"]
ãã®ä¾ã ã¨ã¡ãã»ã¼ã¸ã ãã§ããããè¦å½ã¯ã¤ãããã©ãåå¨ããªããã¡ã¤ã«ãæ¶ããã¨ããã¨ããä¾å¤ãçºçããã£ã¦ãããã¾ããããã§ãã¹ã¿ãã¯ãã¬ã¼ã¹*3ãè¦ãã¨ãhoge.rbã®5è¡ç®ã§å®ç¾©ããã¦ããfugaã¡ã½ããå ã§å¼ãã fileutilsã®rmãå¼ã°ãã¦ããªã¼ã¨ããããããããããã£ã¨ãä»åã¯ä¸åã ãã ããããã«ç¹å®ã§ããããã©ãè¤æ°ã®å¦çã®ã©ãã§ä¾å¤ãèµ·ããã¨ãããããããã
æã¯ActionScript3*4ãæ¸ãã¦ãææããã£ã¦ãASã§æ¸ãããã©ããªæãã«ãªããã ã£ããã¨æã£ã¦ã¡ãã£ã¨AIRã§æ¸ãã¦ã¿ãã*5ã
ASã®å ´åãããããä¾å¤ã¨ãä¾å¤ã¤ãã³ãã®äºç¨®é¡ãããã®ãåä»ã§ããã
import flash.filesystem.File; import flash.filesystem.FileMode; import flash.filesystem.FileStream; import mx.controls.Alert; protected function button1_clickHandler(event:MouseEvent):void { try { readData(); } catch (error:IOError) { Alert.show("errorID = " + error.errorID.toString()); Alert.show("message = " + error.message); Alert.show("name = " + error.name); Alert.show("stacktrace = " + error.getStackTrace()); Alert.show("errorClass = " + flash.utils.getQualifiedClassName(error)); trace("errorID = ", error.errorID); trace("message = ", error.message); trace("name = ", error.name); trace("stacktrace = ", error.getStackTrace()); trace("errorClass = ", flash.utils.getQualifiedClassName(error)); } } private function readData():void { var file:File=File.desktopDirectory.resolvePath("sample.txt"); var stream:FileStream=new FileStream(); try { stream.open(file, FileMode.READ); } finally { stream.close(); } } protected function button2_clickHandler(event:MouseEvent):void { var loader:URLLoader=new URLLoader(); loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); var request:URLRequest=new URLRequest("MissingFile.xml"); loader.load(request); } private function ioErrorHandler(event:IOErrorEvent):void { var e:Error=new Error(); trace(event.text); trace(event.type); trace(e.getStackTrace()); Alert.show(event.text); Alert.show(event.type); Alert.show(e.getStackTrace()); }
å½ç¶ããããã°ã¢ã¼ãã®æããtraceã§ãªãï¼Flex4ããã¯ãããªã£ãã®ã !!ï¼ãã©ããªãªã¼ã¹ã¢ã¼ãã ã£ã¦ãã¡ãã¨æååã¯åããã®ã§æ´»ç¨ããªãæã¯ç¡ããã*6ã
# ããã¯æ®éã®ä¾å¤ errorID = 3003 message = Error #3003: File or directory does not exist. name = Error stacktrace = Error: Error #3003: File or directory does not exist. at flash.filesystem::FileStream/open() at Hoge/readData()[/Users/sugamasao/Documents/Adobe Flash Builder 4/Hoge/src/Hoge.mxml:39] at Hoge/button1_clickHandler()[/Users/sugamasao/Documents/Adobe Flash Builder 4/Hoge/src/Hoge.mxml:20] at Hoge/___Hoge_Button1_click()[/Users/sugamasao/Documents/Adobe Flash Builder 4/Hoge/src/Hoge.mxml:62] # ããããã¤ãã³ããã³ãã© errorClass = flash.errors::IOError Error #2032: Stream Error. URL: app:/MissingFile.xml Error at Hoge/ioErrorHandler()[/Users/sugamasao/Documents/Adobe Flash Builder 4/Hoge/src/Hoge.mxml:53] at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/onComplete()
èãè¨æ¶éããå¾è
ã®ã¤ãã³ããã³ãã©ã ã¨ãããªã¡ãã»ã¼ã¸ã帰ã£ã¦ããªãw ã ããã§ã¤ãã³ããã³ãã©ã§åãåã£ãæã«ã¹ã¿ãã¯ãã¬ã¼ã¹åºãããçµæ§è¯ãã®ã§ã¯ãã¨æã£ããã©ã¤ãã³ããçºç«ãããã¨ã®ã¹ã¿ãã¯ãã¬ã¼ã¹ãã§ã¡ãã£ã¦ããã¾ãå½¹ã«ç«ããªããã
ã¨ã¯ãããæä½éã©ã®ãããªã¨ã©ã¼ãè¿ã£ã¦ãã¦ãããã¯ããããããã¶ãä½ãã«ãã£ã¦ã¯currentTargetã¨ããããã£ã¨è¯ãæ
å ±ãåããæ°ãããï¼ããå
¨ã¦å¿ããã®ã§ãããã¦ï¼ã
é話ä¼é¡
ãã¦ããããã®ä¾å¤ãèµ·ãã£ãæ å ±ã¨ããã®ã¯å½ããåã ããã©ãã¢ããªã±ã¼ã·ã§ã³ãã©ã®ãããªç¶æ³ã«é¥ã£ããã調ã¹ããã¨ãã§ããéè¦ãªæ å ±ã ãã¨ããããåãã°è¯ããã¼ã¨ãããã®ã§ããã°ãããã¦ãªå¯¾å¿ããã¦ããã¨ã§ãããã調ã¹ãã¨ãããã¨ãã§ãããããããªãããã©ããªã«ãèµ·ãã£ãæã«ãããã¼ãããããã¾ãããã¼wãã¨ãè¨ãç¶æ³ã£ã¦ããã®ã¯ããã¨ãã¦ã¯è ¹ãåã£ã¦æ»ã¬ã¹ãç¶æ³ã ã¨æãã
â¦â¦æã«ã¯å¯¾å¿ãæ¼ãããããã¨ããããã¨æãããã©ãããã¯çºè¦ããæã«ãã¡ãã¨åçºããªãããã«å¯¾å¿ããã®ãããã§ãã
ä¾ãã°ããããªï¼ç¬ã話ã§ããè¦ãï¼ã³ã¼ããæ¸ãã¦ãããè ¹ãåã£ã¦æ»ã¬è¦æãããã»ããè¯ã*7ã
begin ãªãã¨ãã®å¦ç rescue => e # ä½ãããªã end
ã³ã¬ä»¥å¤ã«ããã®ãããªä¾ãè ¹ãåã£ã¦æ»ã¬è¦æãå¿ è¦ã«ãªãã±ã¼ã¹ã
begin ãªãã¨ãã®å¦ç rescue => e raise ç¬èªä¾å¤ã¯ã©ã¹.new end
ä¾ãã°ãã¤ãã³ãããªãã³ãªãã®ã§ã¯ãããªæãã
private function errorEventHandler(e:Error):void { this.dispatchEvent(new ç¬èªã¤ãã³ã(ç¬èªã¤ãã³ã.ERROR)); }
ãã¾ãã«ä¾å¤ãæç¤ºçããã¦ããã§ååãªå¯è½æ§ãããããã©ãæ¢ã«èµ·ãã£ãä¾å¤ã®æ å ±ãå ¨ã¦æ¨ã¦ã¦ãæ°ããªã¤ãã³ããä¾å¤ãèµ·ããã¨ããã®ã¯ã»ã¼ä¾å¤ã®æ¡ãã¤ã¶ãã«çãããæ°ãå¹ãããã¤ããããããªãããã©ã大ããªããã£ããã«ãããªã£ã¦ããªãä¾ã§ããããããªããå ã®æ å ±ãããããä¸ã§ã®ä¾å¤éåºãè¡ãã¹ãã§ãã*8ã
ããèªèº«ã¯Rubyã§æ¸ããã¨ãå¤ãã®ã§ããããªãµãã«ãã¦ã³ã³ã¹ãã©ã¯ã¿ã§æ¸¡ããããããä¾å¤ã¯ã©ã¹ã®æ å ±ãã·ãªã¢ã©ã¤ãºåãããã¡ã½ãããå®ç¾©ãã¦ããããéãããã«ãã¦ããã£ã¦ããã®ãæ£è§£ããªãããã©ã¼ãããã¨ãã¯ãããã¦ãªãã ãã©ãå°ãªãã¨ãå¤ã空ã ã£ãæã«ç©ºã ã£ãã£ã¦ãããããã«ãå¤ã®é¨åã«ä½ãã®å²ããä»ããããã«ãã¦ããã
begin ãªãã¨ãã®å¦ç rescue => e raise ç¬èªä¾å¤ã¯ã©ã¹.new("ãªãã¨ããããã¨ãããä¾å¤ãåºãã >Class=[#{e.class}], message=[#{e.message}], stacktrace=[#{e.backtrace}]") end
ã¨ã©ã¼ã¤ãã³ãã§ãmessageã¨ããåãããã®ã¯ãã¡ãã¨åã£ã¦ã¤ãã³ãããã£ã¹ããããã¦ãããã°è¯ãããã
ã©ã®ããã«ã¢ã¦ãããããã¹ãã
ã¨ã©ã¼ãèµ·ãã£ãæ å ±ãåå¾ãããã¨ãã§ããã¨ãã¦ãã§ã¯ã©ããã£ã¦ã¢ã¦ããããããã°è¯ããã
ãµã¼ããµã¤ãã¢ããªã±ã¼ã·ã§ã³
ãããããµã¼ããµã¤ãã§ã¯ãããçéã®é¸æè¢ãããã®ã§ãããã使ãã®ãè¯ãã§ãããï¼ãããã«ãããç¡ãã®ã¯ã¤ãã!!ï¼ã
- èªåã®ãã°ãã¡ã¤ã«ã«åºåãã
- syslogãEventLogã¿ãããªOSãæä¾ãããã°ã·ã¹ãã ã«åºåãã
ãã¹ã¯ãããã¢ããªã±ã¼ã·ã§ã³
ãã¹ã¯ãããã¢ããªã±ã¼ã·ã§ã³ã®å ´åã¯çµæ§é£ãããçµå±ãã¦ã¼ã¶ããéã£ã¦ããããªãããªãã¨ãããªãã±ã¼ã¹ãå¤ããããã¡ã¤ã«ã«è½ã¨ãã«ãã¦ãèªå管çãããã¡ã«ãªãå¯è½æ§ãããããã ã
- èªåã®ãã°ãã¡ã¤ã«ã«åºåããï¼èªåã§ãã°ãã¡ã¤ã«ã®ç®¡çãå¿ è¦ããï¼
- syslogãEventLogã¿ãããªOSãæä¾ãããã°ã·ã¹ãã ã«åºåãã
- ã¬ãã¼ãéä¿¡æ©è½çãªãã®ï¼ã¢ããªã±ã¼ã·ã§ã³ãOSãè½ã¡ãå¾ã«åºã¦ããã¢ã¬ï¼
- ç¬èªã«å®ç¾©ããã¨ã©ã¼çªå·ã¨ããã¢ããªã±ã¼ã·ã§ã³ãçµäºããã¨ãã«ã¢ã©ã¼ãã¨ãã§åºãã¦ãã
ã³ã³ãã¸ãã¯ã¢ããªã±ã¼ã·ã§ã³ã®æ§è³ªãUIã¨ã®å
¼ãåããããããã©ãã¬ãã¼ãæ©è½ã¿ããã®ãä¸çªç¡é£ãªãã§ãããã
è£è¶³ï¼ç§ã¯ãã¹ã¯ãããã¢ããªã±ã¼ã·ã§ã³ãéçºããçµé¨ããªãã®ã§ããã¼ããããæ¹ãè¯ããï¼ã¨ããæ¹æ³ãããã°æãã¦ä¸ãã
ãã®å ´åã¨ã¯ã¡ãã£ã¨è©±ãç°ãªãããã©ãJSã®å ´åã¯onerror颿°ã使ã£ã¦ä¾å¤ããã£ãããã¦ä¾å¤ãçºçããç¨ã®URLã«æ å ±ãæããããªãã¦ã®ãèãããã¨ãããã¾ããã
æ¬å½ã¯ãã°ã®åºåæ¹éã«ã¤ãã¦ã®è©±ãæ¸ããã¨æã£ããã©ãªããæ¢ã«è©±ãé·ããªã£ãã®ã§è¾ããã
ãã¼ããã«è¦ç¹ãæ¼ããã¦åºãï¼ãã¡ã¤ã«I/Oã¯ã¨ã¦ãé
ãã®ã§ããããåºãã®ã¯ãããã°çã ãã«ãããã ãï¼ã¨ãããã°ã¬ãã«ã¨ããã«ããªãã·ã§ã³ã¨ãã§ãã¡ãã¨åãæ¿ããæ©æ§ã使ããã¨ããããã話ãªã®ã§ãã¾ãæ®éã®éçºè
ã¯ç¥ã£ã¦ããã¨ã§ãããâ¦â¦ã
ãããã¦èªã¿ãã
- いわゆる仕様と業務例外について - 急がば回れ、選ぶなら近道
- ããã°ã©ããç¥ãã¹ã97ã®ãã¨
ããã°ã©ããç¥ãã¹ã97ã®ãã¨ã«ã¯ãã«ãã´ãªå¥ã®ç®æ¬¡ããããã§ãããã®ã«ãã´ãªã¨ãã¦"ã¨ã©ã¼ãä¾å¤ã¨ãã®å¦ç"ã¨ããé
ç®ãããã®ã§ãèªãã§ã¿ãã¨è¯ãã§ãããã
ããã¾ã æ¬ãæã£ã¦ãªãã§ãã£ã¦ï¼ããã®ãªã³ã¯ããè²·ãã¨è¯ãããããªãã§ããã!!

ããã°ã©ããç¥ãã¹ã97ã®ãã¨
- ä½è : åç°å人,Kevlin Henney,å¤ç®å¤§
- åºç社/ã¡ã¼ã«ã¼: ãªã©ã¤ãªã¼ã¸ã£ãã³
- çºå£²æ¥: 2010/12/18
- ã¡ãã£ã¢: åè¡æ¬ï¼ã½ããã«ãã¼ï¼
- è³¼å ¥: 58人 ã¯ãªãã¯: 2,107å
- ãã®ååãå«ãããã° (332ä»¶) ãè¦ã
*1:å¿æ§ãã£ã¤ã¼ããããããã®ãã³ã¼ãã«è½ã¨ãã¦ããã¨ãããã¨
*2:ä¾å¤ãçºçããã¯ã©ã¹èªèº«ãçµæ§éè¦ãªæãããã«ãªãã®ã ã
*3:ãã®å ´åbacktraceã ãã©
*5:AS3å¿ãããã¦ãããããtryãcatchã®ã¨ã©ã¼ãåºãå¦çãã±ã£ã¨æãã¤ããªãã£ãã®ã§â¦â¦
*6:ã¨ãã確èªã®ããã«Alertåºãã
*7:ç©ã«ãã£ã¦ã¯ä¾å¤ãåºãããªãã©ã¤å¦çãããã¨ãããããã䏿¦ã«ä¾å¤ãæ¡ãã¤ã¶ãã®ããã¡ã¨ã¯è¨ããªãã
*8:ã©ã¤ãã©ãªã§ã¯ã¾ãéãè¨è¨ã«ãªãã¨æããã©ãããã¯ããã¾ã§ãã¢ããªã±ã¼ã·ã§ã³ã¬ãã«ã®è©±ã