開発環境
- Microsoft Windows 8 Pro 64bit 日本語 (OS)
- Microsoft Visual C# 2010 Express Edition (IDE)
- 言語: C#
『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487311-294-7)の 第16章(例外)15.6(練習問題)練習16-1を解いてみる。
その他参考書籍
練習16-1.
コード
using System; using System.Collections.Generic; class Cat { private int age; private string name; public Cat(int age, string name) { this.age = age; this.name = name; } public int Age { get { return age; } set { age = value; } } public override string ToString() { return "Name: " + name + ", Age: " + age; } } class Tester { public void Run() { try { Console.WriteLine("Catオブジェクトの割り当て開始"); Cat tama = new Cat(5, "Tama"); Cat sora = new Cat(10, "Sora"); List<Cat> cats = new List<Cat>(); cats.Add(tama); cats.Add(sora); // ループ中に例外発生 for (int i = 0; i < cats.Count + 1; i++) { Console.WriteLine(cats[i].ToString()); } Console.WriteLine("猫のリストの出力終了"); } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } catch (Exception e) { Console.WriteLine(e.Message); } finally { Console.WriteLine("Catオブジェクトの割り当て解除"); } } static void Main() { Tester t = new Tester(); t.Run(); } }
入出力結果(Console Window)
Catオブジェクトの割り当て開始 Name: Tama, Age: 5 Name: Sora, Age: 10 インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さく なければなりません。 パラメーター名: index Catオブジェクトの割り当て解除 続行するには何かキーを押してください . . .
ちなみにJavaScriptの場合。
コード(TextWrangler)
var Cat = function(age, name){ var age; var name; this.get_age = function(){ return age; }; this.set_age = function(value){ age = value; }; this.to_string = function(){ return "Name: " + name + ", Age: " + age; }; }; var result = ""; try{ result += "Catオブジェクトの割り当て開始\n"; var tama = new Cat(5, "Tama"); var sora = new Cat(10, "Sora"); var cats = [tama, sora]; for(var i = 0; i < cats.length + 1; i++){ result += cats[i].to_string() + "\n"; } result += "猫のリストの出力終了\n" } catch(e){ result += "エラー: " + e + "\n"; } finally { result += "Catオブジェクトの割り当て解除\n"; } $('#pre0').text(result);
JavaScriptはArgumenOutOfRangeExceptionに相当する例外はないみたい。未定義の要素にアクセスしてもエラーにならず、その要素の値はundefinedになる。
pythonの場合。
sample.py
コード(TextWrangler)
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- class Cat: def __init__(self,age, name): self.age = age self.name = name def __str__(self): return "Name: {0}, Age: {1}".format(self.name, self.age) def get_age(self): return self.age def set_age(self,value): self.age = value if __name__ == '__main__': try: print("Catオブジェクトの割り当て開始") tama = Cat(5, "Tama") sora = Cat(10, "Sora") cats = [tama, sora] for i in range(len(cats) + 1): print(cats[i]) print("猫のリストの出力終了") except IndexError: print("エラー: IndexError") except Exception: print("エラー: 未知の例外") finally: print("Catオブジェクトの割り当て解除")
入出力結果(Terminal)
$ ./sample.py Catオブジェクトの割り当て開始 Name: Tama, Age: 5 Name: Sora, Age: 10 エラー: IndexError Catオブジェクトの割り当て解除 $
Pythonでのクラス例外、エラーメッセージの使い方がまだいまいち理解できてないかも。
0 コメント:
コメントを投稿