diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-03-02 10:52:39 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-03-02 10:52:39 +0000 |
| commit | 37c6f8a5cbb2cfc4cd9726ebc82c1ced7c7b2604 (patch) | |
| tree | a9360a5d1c8664c2f6e349e0cd2736965e7c7685 /jq.pyx | |
| parent | 76525df1ba37edf8dda6450a269f27e349d41613 (diff) | |
Handle non-string errors with constant
Diffstat (limited to 'jq.pyx')
| -rw-r--r-- | jq.pyx | 23 |
1 files changed, 14 insertions, 9 deletions
@@ -174,19 +174,24 @@ cdef jq_state* _compile(object program_bytes, object args) except NULL: cdef void _store_error(void* store_ptr, jv error) noexcept: - # TODO: handle errors not of JV_KIND_STRING cdef _ErrorStore store = <_ErrorStore>store_ptr - if jv_get_kind(error) == JV_KIND_STRING: - try: - error_string = jv_string_to_py_string(error) - except: - error_string = "Internal error" - store.store_error(error_string) + error_string = _jq_error_to_py_string(error) + store.store_error(error_string) jv_free(error) +cdef unicode _jq_error_to_py_string(jv error) noexcept: + if jv_get_kind(error) == JV_KIND_STRING: + try: + return jv_string_to_py_string(error) + except: + return u"Internal error" + else: + return u"(not a string)" + + cdef class _ErrorStore(object): cdef object _errors @@ -361,7 +366,7 @@ cdef class _ResultIterator(object): return _jv_to_python(result) elif jv_invalid_has_msg(jv_copy(result)): error_message = jv_invalid_get_msg(result) - message = jv_string_to_py_string(error_message) + message = _jq_error_to_py_string(error_message) jv_free(error_message) raise ValueError(message) else: @@ -394,7 +399,7 @@ cdef class _ResultIterator(object): return value elif jv_invalid_has_msg(jv_copy(value)): error_message = jv_invalid_get_msg(value) - message = jv_string_to_py_string(error_message) + message = _jq_error_to_py_string(error_message) jv_free(error_message) raise ValueError(u"parse error: " + message) else: |
