例外のテスト - Rubyist の Python 学習記録(11)

PythonLibrary Python 2019年 1月 11日

間違った入力が与えられた時は,適切に失敗する必要がある. 今回の generate_with_int_hist では,画素値が整数値である必要があるが,実数値を入力してしまうとエラーが発生してしまう. また,整数値のビット数が多くなるとヒストグラムのデータ数が増えてしまうため,メモリ不足に陥る場合がある. 通常利用を考えて,実数値のピクセルの場合と 16 ビットを超える画像の場合には例外を出すようにする.

例外のテスト

  • tests/test_mono_image.rb の 'generate integer histogram' に例外のテストを追加する. it.assertRaises で ValueError が捕捉されるかどうかを確認する. with で括られた中のメソッドで例外が発生すれば assert に成功する.
  • with such.A('MonoImage class') as it:
        (中略)
        @it.should('generate integer histogram')
        def test():
            (中略)
            ### raise exception when over 16 bit MonoImage inputs
            mi17 = MonoImage.create_with_array([1, 2, 3], np.uint32, 17)
            with it.assertRaises(ValueError):
                mi17.generate_with_int_hist()
    
            ### raise exception when double MonoImage inputs
            mid = MonoImage.create_with_array([1, 2, 3], np.double, 0)
            with it.assertRaises(ValueError):
                mid.generate_with_int_hist()

例外チェックの追加

  • generate_with_int_hist のメソッドの頭で self.bits を確認して,例外を発生するようにする. 例外は raise で発生させる.今回は値に関するエラーなので,ValueError とした.
  • class MonoImage:
        (中略)
        def generate_with_int_hist(self):
            if self.bits > 16:
                raise ValueError('bits should be less than 16')
            if self.bits == 0:
                raise ValueError('should be int MonoImage')

今回もあまり長くならなかったが今日はここまで.