Currently, exceptions in the generated code are all thrown as runtime errors (RuntimeError in python, std::runtime_error in c++). For example, when reading a binary stream:
|
if magic_bytes != MAGIC_BYTES: # pyright: ignore [reportUnnecessaryComparison] |
|
raise RuntimeError("Invalid magic bytes") |
|
|
|
version = read_fixed_int32(self._stream) |
|
if version != CURRENT_BINARY_FORMAT_VERSION: |
|
raise RuntimeError("Invalid binary format version") |
|
|
|
self._schema = string_serializer.read(self._stream) |
|
if expected_schema and self._schema != expected_schema: |
|
raise RuntimeError("Invalid schema") |
These would be more useful if they were library-defined exceptions.
For example, using mrd, if someone attempts to use a mrd.BinaryReader to open an invalid file in Python, the user will see the following:
Traceback (most recent call last):
...
with mrd.BinaryMrdReader(args.input_file) as reader:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/uv/.venv/lib/python3.12/site-packages/mrd/binary.py", line 49, in __init__
_binary.BinaryProtocolReader.__init__(self, stream, MrdReaderBase.schema)
File "/opt/uv/.venv/lib/python3.12/site-packages/mrd/_binary.py", line 81, in __init__
raise RuntimeError("Invalid magic bytes")
RuntimeError: Invalid magic bytes
Instead, the Python program that opens the binary reader could catch a mrd.InvalidMagicBytes exception, and print a helfpul error message, such as "Invalid file, are you sure it is in MRD format?"...
I vote we replace these runtime errors with custom exceptions that can be better handled downstream. This applies to the generated C++ and MATLAB code as well.
Currently, exceptions in the generated code are all thrown as runtime errors (
RuntimeErrorin python,std::runtime_errorin c++). For example, when reading a binary stream:yardl/tooling/internal/python/static_files/_binary.py
Lines 80 to 89 in ba89cf7
These would be more useful if they were library-defined exceptions.
For example, using
mrd, if someone attempts to use amrd.BinaryReaderto open an invalid file in Python, the user will see the following:Instead, the Python program that opens the binary reader could catch a
mrd.InvalidMagicBytesexception, and print a helfpul error message, such as "Invalid file, are you sure it is in MRD format?"...I vote we replace these runtime errors with custom exceptions that can be better handled downstream. This applies to the generated C++ and MATLAB code as well.