diff options
author | Michael Byers <ByersJR.Michael@gmail.com> | 2020-01-07 14:57:39 -0500 |
---|---|---|
committer | Marcus Müller <marcus@hostalia.de> | 2020-02-09 19:24:04 +0100 |
commit | deeece0502595dff0a27ed4ee8159ee64b7fb3ea (patch) | |
tree | 69c9b9fc2f54408fda88d54d66c2015df4ed54cd | |
parent | 7d619aed8b8eb185890df2940cbee5de6062c4bd (diff) |
pmt: Fix RuntimeError in pmt_to_python
Python has a RuntimeError that's thrown during the pmt to_python function.
Instead of throwing this error, SWIG has been updated to throw a TypeError.
This allows us to keep the same behavior whereby we iterate over PMT types
until the proper conversion is found
-rw-r--r-- | gnuradio-runtime/include/pmt/pmt.h | 2 | ||||
-rw-r--r-- | gnuradio-runtime/lib/pmt/pmt.cc | 2 | ||||
-rw-r--r-- | gnuradio-runtime/swig/gr_extras.i | 3 | ||||
-rw-r--r-- | gr-blocks/python/blocks/qa_hier_block2.py | 28 | ||||
-rw-r--r-- | gr-blocks/python/blocks/qa_vector_sink_source.py | 2 | ||||
-rw-r--r-- | gr-digital/python/digital/qa_ofdm_carrier_allocator_cvc.py | 8 | ||||
-rw-r--r-- | gr-digital/python/digital/qa_ofdm_serializer_vcc.py | 2 | ||||
-rw-r--r-- | gr-filter/python/filter/qa_pfb_channelizer.py | 2 |
8 files changed, 26 insertions, 23 deletions
diff --git a/gnuradio-runtime/include/pmt/pmt.h b/gnuradio-runtime/include/pmt/pmt.h index 3bb013d6c4..a96d5f22f7 100644 --- a/gnuradio-runtime/include/pmt/pmt.h +++ b/gnuradio-runtime/include/pmt/pmt.h @@ -89,7 +89,7 @@ public: exception(const std::string& msg, pmt_t obj); }; -class PMT_API wrong_type : public exception +class PMT_API wrong_type : public std::invalid_argument { public: wrong_type(const std::string& msg, pmt_t obj); diff --git a/gnuradio-runtime/lib/pmt/pmt.cc b/gnuradio-runtime/lib/pmt/pmt.cc index d14e695763..7ea1c9a5b5 100644 --- a/gnuradio-runtime/lib/pmt/pmt.cc +++ b/gnuradio-runtime/lib/pmt/pmt.cc @@ -37,7 +37,7 @@ exception::exception(const std::string& msg, pmt_t obj) } wrong_type::wrong_type(const std::string& msg, pmt_t obj) - : exception(msg + ": wrong_type ", obj) + : invalid_argument(msg + ": wrong_type " + write_string(obj)) { } diff --git a/gnuradio-runtime/swig/gr_extras.i b/gnuradio-runtime/swig/gr_extras.i index 902be1650b..5047572dba 100644 --- a/gnuradio-runtime/swig/gr_extras.i +++ b/gnuradio-runtime/swig/gr_extras.i @@ -19,6 +19,9 @@ try { $action } + catch(std::invalid_argument &e) { + SWIG_exception(SWIG_TypeError, e.what()); + } catch(std::exception &e) { SWIG_exception(SWIG_RuntimeError, e.what()); } diff --git a/gr-blocks/python/blocks/qa_hier_block2.py b/gr-blocks/python/blocks/qa_hier_block2.py index 74533ad84b..e36838afee 100644 --- a/gr-blocks/python/blocks/qa_hier_block2.py +++ b/gr-blocks/python/blocks/qa_hier_block2.py @@ -74,7 +74,7 @@ class test_hier_block2(gr_unittest.TestCase): nop1 = blocks.nop(gr.sizeof_int) nop2 = blocks.nop(gr.sizeof_int) hblock.connect(nop1, hblock) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.connect(nop2, hblock)) def test_006_connect_invalid_src_port_neg(self): @@ -82,7 +82,7 @@ class test_hier_block2(gr_unittest.TestCase): gr.io_signature(1,1,gr.sizeof_int), gr.io_signature(1,1,gr.sizeof_int)) nop1 = blocks.nop(gr.sizeof_int) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.connect((hblock, -1), nop1)) def test_005_connect_invalid_src_port_exceeds(self): @@ -90,7 +90,7 @@ class test_hier_block2(gr_unittest.TestCase): gr.io_signature(1,1,gr.sizeof_int), gr.io_signature(1,1,gr.sizeof_int)) nop1 = blocks.nop(gr.sizeof_int) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.connect((hblock, 1), nop1)) def test_007_connect_invalid_dst_port_neg(self): @@ -99,7 +99,7 @@ class test_hier_block2(gr_unittest.TestCase): gr.io_signature(1,1,gr.sizeof_int)) nop1 = blocks.nop(gr.sizeof_int) nop2 = blocks.nop(gr.sizeof_int) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.connect(nop1, (nop2, -1))) def test_008_connect_invalid_dst_port_exceeds(self): @@ -108,7 +108,7 @@ class test_hier_block2(gr_unittest.TestCase): gr.io_signature(1,1,gr.sizeof_int)) nop1 = blocks.null_sink(gr.sizeof_int) nop2 = blocks.null_sink(gr.sizeof_int) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.connect(nop1, (nop2, 1))) def test_009_check_topology(self): @@ -144,7 +144,7 @@ class test_hier_block2(gr_unittest.TestCase): nop1 = blocks.nop(gr.sizeof_int) nop2 = blocks.nop(gr.sizeof_int) hblock.connect(hblock, nop1) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.disconnect(hblock, nop2)) def test_014_disconnect_input_neg(self): @@ -153,7 +153,7 @@ class test_hier_block2(gr_unittest.TestCase): gr.io_signature(1,1,gr.sizeof_int)) nop1 = blocks.nop(gr.sizeof_int) hblock.connect(hblock, nop1) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.disconnect((hblock, -1), nop1)) def test_015_disconnect_input_exceeds(self): @@ -162,7 +162,7 @@ class test_hier_block2(gr_unittest.TestCase): gr.io_signature(1,1,gr.sizeof_int)) nop1 = blocks.nop(gr.sizeof_int) hblock.connect(hblock, nop1) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.disconnect((hblock, 1), nop1)) def test_016_disconnect_output(self): @@ -180,7 +180,7 @@ class test_hier_block2(gr_unittest.TestCase): nop1 = blocks.nop(gr.sizeof_int) nop2 = blocks.nop(gr.sizeof_int) hblock.connect(nop1, hblock) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.disconnect(nop2, hblock)) def test_018_disconnect_output_neg(self): @@ -189,7 +189,7 @@ class test_hier_block2(gr_unittest.TestCase): gr.io_signature(1,1,gr.sizeof_int)) nop1 = blocks.nop(gr.sizeof_int) hblock.connect(hblock, nop1) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.disconnect(nop1, (hblock, -1))) def test_019_disconnect_output_exceeds(self): @@ -198,7 +198,7 @@ class test_hier_block2(gr_unittest.TestCase): gr.io_signature(1,1,gr.sizeof_int)) nop1 = blocks.nop(gr.sizeof_int) hblock.connect(nop1, hblock) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.disconnect(nop1, (hblock, 1))) def test_020_run(self): @@ -222,7 +222,7 @@ class test_hier_block2(gr_unittest.TestCase): blk = gr.hier_block2("block", gr.io_signature(1, 1, 1), gr.io_signature(1, 1, 1)) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.connect(blk)) def test_023_connect_single_twice(self): @@ -231,7 +231,7 @@ class test_hier_block2(gr_unittest.TestCase): gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) hblock.connect(blk) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.connect(blk)) def test_024_disconnect_single(self): @@ -247,7 +247,7 @@ class test_hier_block2(gr_unittest.TestCase): blk = gr.hier_block2("block", gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0)) - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, lambda: hblock.disconnect(blk)) def test_026_run_single(self): diff --git a/gr-blocks/python/blocks/qa_vector_sink_source.py b/gr-blocks/python/blocks/qa_vector_sink_source.py index 103d815dd2..512e8f1df1 100644 --- a/gr-blocks/python/blocks/qa_vector_sink_source.py +++ b/gr-blocks/python/blocks/qa_vector_sink_source.py @@ -65,7 +65,7 @@ class test_vector_sink_source(gr_unittest.TestCase): # vector has sufficient size src_data = [float(x) for x in range(16)] expected_result = tuple(src_data) - self.assertRaises(RuntimeError, lambda : blocks.vector_source_f(src_data, False, 3)) + self.assertRaises(TypeError, lambda : blocks.vector_source_f(src_data, False, 3)) def test_004(self): # Test sending and receiving tagged streams diff --git a/gr-digital/python/digital/qa_ofdm_carrier_allocator_cvc.py b/gr-digital/python/digital/qa_ofdm_carrier_allocator_cvc.py index 78ea0d9d35..e6671965c9 100644 --- a/gr-digital/python/digital/qa_ofdm_carrier_allocator_cvc.py +++ b/gr-digital/python/digital/qa_ofdm_carrier_allocator_cvc.py @@ -198,12 +198,12 @@ class qa_digital_carrier_allocator_cvc (gr_unittest.TestCase): def test_004_t (self): """ - Provoking RuntimeError exceptions providing wrong user input (earlier invisible SIGFPE). + Provoking TypeError exceptions providing wrong user input (earlier invisible SIGFPE). """ fft_len = 6 # Occupied carriers - with self.assertRaises(RuntimeError) as oc: + with self.assertRaises(TypeError) as oc: alloc = digital.ofdm_carrier_allocator_cvc(fft_len, (), ((),), @@ -212,7 +212,7 @@ class qa_digital_carrier_allocator_cvc (gr_unittest.TestCase): self.tsb_key) # Pilot carriers - with self.assertRaises(RuntimeError) as pc: + with self.assertRaises(TypeError) as pc: alloc = digital.ofdm_carrier_allocator_cvc(fft_len, ((),), (), @@ -221,7 +221,7 @@ class qa_digital_carrier_allocator_cvc (gr_unittest.TestCase): self.tsb_key) # Pilot carrier symbols - with self.assertRaises(RuntimeError) as ps: + with self.assertRaises(TypeError) as ps: alloc = digital.ofdm_carrier_allocator_cvc(fft_len, ((),), ((),), diff --git a/gr-digital/python/digital/qa_ofdm_serializer_vcc.py b/gr-digital/python/digital/qa_ofdm_serializer_vcc.py index edfd1a2f03..0a1befe5b7 100644 --- a/gr-digital/python/digital/qa_ofdm_serializer_vcc.py +++ b/gr-digital/python/digital/qa_ofdm_serializer_vcc.py @@ -195,7 +195,7 @@ class qa_ofdm_serializer_vcc (gr_unittest.TestCase): """ Make sure it fails if it should """ fft_len = 16 occupied_carriers = ((1, 3, 4, 11, 12, 112),) # Something invalid - self.assertRaises(RuntimeError, digital.ofdm_serializer_vcc, fft_len, occupied_carriers, self.tsb_key) + self.assertRaises(TypeError, digital.ofdm_serializer_vcc, fft_len, occupied_carriers, self.tsb_key) if __name__ == '__main__': diff --git a/gr-filter/python/filter/qa_pfb_channelizer.py b/gr-filter/python/filter/qa_pfb_channelizer.py index 2ff8edb983..c6a06c3860 100644 --- a/gr-filter/python/filter/qa_pfb_channelizer.py +++ b/gr-filter/python/filter/qa_pfb_channelizer.py @@ -61,7 +61,7 @@ class test_pfb_channelizer(gr_unittest.TestCase): def test_0003(self): """Test roundig error handling for oversample rate, (bad).""" - self.assertRaises(RuntimeError, + self.assertRaises(TypeError, filter.pfb.channelizer_ccf, 36, taps=self.taps, oversample_rate=10.1334) |