💡
この記事は Middleman 時代に書いた古いものです。記録のため、astro-notion-blog に移行していますが、あまり参考にしないでください。
間違った入力が与えられた時は,適切に失敗する必要がある. 今回の 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')
今回もあまり長くならなかったが今日はここまで.