11pyjlany_repr (xo:: PyPtr ) =
2- try
2+ @pyjltry begin
33 x = PyJuliaValue_GetValue (xo)
44 s = " <jl $(repr (x)) >"
55 PyUnicode_From (s)
6- catch err
7- PyErr_SetJuliaError (err)
8- PyNULL
9- end
6+ end PyNULL
107
118pyjlany_str (xo:: PyPtr ) =
12- try
9+ @pyjltry begin
1310 x = PyJuliaValue_GetValue (xo)
1411 s = string (x)
1512 PyUnicode_From (s)
16- catch err
17- PyErr_SetJuliaError (err)
18- return PyNULL
19- end
13+ end PyNULL
2014
2115pyjlany_getattro (xo:: PyPtr , ko:: PyPtr ) = begin
2216 # Try generic lookup first
@@ -31,19 +25,10 @@ pyjlany_getattro(xo::PyPtr, ko::PyPtr) = begin
3125 k = PyUnicode_AsString (ko)
3226 isempty (k) && PyErr_IsSet () && return PyNULL
3327 k = pyjl_attr_py2jl (k)
34- try
28+ @pyjltry begin
3529 v = getproperty (x, Symbol (k))
3630 PyObject_From (v)
37- catch err
38- if ! hasproperty (x, Symbol (k)) ||
39- (err isa UndefVarError && err. var === Symbol (k)) ||
40- (err isa ErrorException && occursin (" has no field" , err. msg))
41- PyErr_SetStringFromJuliaError (PyExc_AttributeError (), err)
42- else
43- PyErr_SetJuliaError (err)
44- end
45- PyNULL
46- end
31+ end PyNULL (Custom, ! hasproperty (x, Symbol (k)))=> AttributeError (UndefVarError, Symbol (k))=> AttributeError (ErrorException, r" has no field" )=> AttributeError
4732end
4833
4934propertytype (x, k) =
@@ -68,22 +53,13 @@ pyjlany_setattro(xo::PyPtr, ko::PyPtr, vo::PyPtr) = begin
6853 k = PyUnicode_AsString (ko)
6954 isempty (k) && PyErr_IsSet () && return Cint (- 1 )
7055 k = pyjl_attr_py2jl (k)
71- try
56+ @pyjltry begin
7257 V = propertytype (x, Symbol (k))
7358 ism1 (PyObject_Convert (vo, V)) && return Cint (- 1 )
7459 v = takeresult (V)
7560 setproperty! (x, Symbol (k), v)
7661 Cint (0 )
77- catch err
78- if ! hasproperty (x, Symbol (k)) ||
79- (err isa UndefVarError && err. var === Symbol (k)) ||
80- (err isa ErrorException && occursin (" has no field" , err. msg))
81- PyErr_SetStringFromJuliaError (PyExc_AttributeError (), err)
82- else
83- PyErr_SetJuliaError (err)
84- end
85- Cint (- 1 )
86- end
62+ end Cint (- 1 ) (Custom, ! hasproperty (x, Symbol (k)))=> AttributeError (UndefVarError, Symbol (k))=> AttributeError (ErrorException, r" has no field" )=> AttributeError
8763end
8864
8965pyjl_dir (x) = propertynames (x)
@@ -103,13 +79,7 @@ pyjlany_dir(xo::PyPtr, _::PyPtr) = begin
10379 Py_DecRef (fo)
10480 isnull (ro) && return PyNULL
10581 x = PyJuliaValue_GetValue (xo)
106- ks = try
107- collect (map (string, pyjl_dir (x)))
108- catch err
109- Py_DecRef (ro)
110- PyErr_SetJuliaError (err)
111- return PyNULL
112- end
82+ ks = @pyjltry collect (map (string, pyjl_dir (x))) PyNULL OnErr=> Py_DecRef (ro)
11383 for k in ks
11484 ko = PyUnicode_From (pyjl_attr_jl2py (k))
11585 isnull (ko) && (Py_DecRef (ro); return PyNULL)
@@ -134,31 +104,11 @@ pyjlany_call(fo::PyPtr, argso::PyPtr, kwargso::PyPtr) = begin
134104 ism1 (PyObject_Convert (kwargso, Dict{Symbol,Any})) && return PyNULL
135105 kwargs = takeresult (Dict{Symbol,Any})
136106 end
137- try
138- x = f (args... ; kwargs... )
139- PyObject_From (x)
140- catch err
141- if err isa MethodError && err. f === f
142- PyErr_SetStringFromJuliaError (PyExc_TypeError (), err)
143- else
144- PyErr_SetJuliaError (err)
145- end
146- PyNULL
147- end
107+ @pyjltry PyObject_From (f (args... ; kwargs... )) PyNULL (MethodError, f)=> TypeError
148108end
149109
150110pyjlany_length (xo:: PyPtr ) =
151- try
152- x = PyJuliaValue_GetValue (xo)
153- Py_ssize_t (length (x))
154- catch err
155- if err isa MethodError && err. f === length
156- PyErr_SetStringFromJuliaError (PyExc_TypeError (), err)
157- else
158- PyErr_SetJuliaError (err)
159- end
160- Py_ssize_t (- 1 )
161- end
111+ @pyjltry Py_ssize_t (length (PyJuliaValue_GetValue (xo))) Py_ssize_t (- 1 ) (MethodError, length)=> TypeError
162112
163113@generated pyjl_keytype (:: Type{T} ) where {T} =
164114 try
@@ -182,18 +132,7 @@ pyjlany_getitem(xo::PyPtr, ko::PyPtr) = begin
182132 x = PyJuliaValue_GetValue (xo)
183133 k = pyjl_getindices (x, ko)
184134 k === PYERR () && return PyNULL
185- try
186- PyObject_From (x[k... ])
187- catch err
188- if err isa BoundsError && err. a === x
189- PyErr_SetStringFromJuliaError (PyExc_IndexError (), err)
190- elseif err isa KeyError && (err. key === k || (err. key,) === k)
191- PyErr_SetStringFromJuliaError (PyExc_KeyError (), err)
192- else
193- PyErr_SetJuliaError (err)
194- end
195- PyNULL
196- end
135+ @pyjltry PyObject_From (x[k... ]) PyNULL BoundsError=> IndexError KeyError=> KeyError
197136end
198137
199138@generated pyjl_valtype (:: Type{T} ) where {T} =
@@ -218,7 +157,7 @@ pyjlany_setitem(xo::PyPtr, ko::PyPtr, vo::PyPtr) = begin
218157 x = PyJuliaValue_GetValue (xo)
219158 k = pyjl_getindices (x, ko)
220159 k === PYERR () && return Cint (- 1 )
221- try
160+ @pyjltry begin
222161 if isnull (vo)
223162 delete! (x, k... )
224163 Cint (0 )
@@ -228,18 +167,7 @@ pyjlany_setitem(xo::PyPtr, ko::PyPtr, vo::PyPtr) = begin
228167 x[k... ] = v
229168 Cint (0 )
230169 end
231- catch err
232- if err isa BoundsError && err. a === x
233- PyErr_SetStringFromJuliaError (PyExc_IndexError (), err)
234- elseif err isa KeyError && (err. key === k || (err. key,) === k)
235- PyErr_SetStringFromJuliaError (PyExc_KeyError (), err)
236- elseif err isa MethodError && err. f === delete!
237- PyErr_SetStringFromJuliaError (PyExc_TypeError (), err)
238- else
239- PyErr_SetJuliaError (err)
240- end
241- Cint (- 1 )
242- end
170+ end Cint (- 1 ) BoundsError=> IndexError KeyError=> KeyError (MethodError, delete!)=> TypeError
243171end
244172
245173pyjlany_iter (xo:: PyPtr ) = PyJuliaIteratorValue_New (Iterator (PyJuliaValue_GetValue (xo)))
@@ -250,16 +178,7 @@ pyjlany_contains(xo::PyPtr, vo::PyPtr) = begin
250178 r == - 1 && return Cint (- 1 )
251179 r == 0 && return Cint (0 )
252180 v = takeresult (eltype (x))
253- try
254- Cint (v in x)
255- catch err
256- if err isa MethodError && err. f === :in
257- PyErr_SetStringFromJuliaError (PyExc_TypeError (), err)
258- else
259- PyErr_SetJuliaError (err)
260- end
261- Cint (- 1 )
262- end
181+ @pyjltry Cint (v in x) Cint (- 1 ) (MethodError, in)=> TypeError
263182end
264183
265184pyjlany_richcompare (xo:: PyPtr , yo:: PyPtr , op:: Cint ) = begin
@@ -268,7 +187,7 @@ pyjlany_richcompare(xo::PyPtr, yo::PyPtr, op::Cint) = begin
268187 r == - 1 && return PyNULL
269188 r == 0 && return PyNotImplemented_New ()
270189 y = takeresult ()
271- try
190+ @pyjltry begin
272191 if op == Py_EQ
273192 PyObject_From (x == y)
274193 elseif op == Py_NE
@@ -285,14 +204,7 @@ pyjlany_richcompare(xo::PyPtr, yo::PyPtr, op::Cint) = begin
285204 PyErr_SetString (PyExc_ValueError (), " bad op given to richcompare: $op " )
286205 PyNULL
287206 end
288- catch err
289- if err isa MethodError && err. f in (== , != , <= , < , >= , > )
290- PyNotImplemented_New ()
291- else
292- PyErr_SetJuliaError (err)
293- PyNULL
294- end
295- end
207+ end PyNULL (MethodError, == , != , <= , < , >= , > )=> NotImplemented
296208end
297209
298210const ALL_MIMES = [
@@ -374,16 +286,7 @@ pyjlany_repr_mimebundle(xo::PyPtr, args::PyPtr, kwargs::PyPtr) = begin
374286end
375287
376288pyjlany_name (xo:: PyPtr , :: Ptr{Cvoid} ) =
377- try
378- PyObject_From (string (nameof (PyJuliaValue_GetValue (xo))))
379- catch err
380- if err isa MethodError && err. f === nameof
381- PyErr_SetString (PyExc_AttributeError (), " __name__" )
382- else
383- PyErr_SetJuliaError (err)
384- end
385- PyNULL
386- end
289+ @pyjltry PyObject_From (string (nameof (PyJuliaValue_GetValue (xo)))) PyNULL (MethodError, nameof)=> AttributeError
387290
388291pyjlany_toraw (xo:: PyPtr , :: PyPtr ) = PyJuliaRawValue_New (PyJuliaValue_GetValue (xo))
389292
@@ -394,48 +297,28 @@ Base.show(io::IO, m::MIME, x::ExtraNewline) = show(io, m, x.value)
394297Base. show (io:: IO , m:: MIME"text/plain" , x:: ExtraNewline ) = (show (io, m, x. value); println (io))
395298Base. showable (m, x:: ExtraNewline ) = showable (m, x. value)
396299
397- pyjlany_display (xo:: PyPtr , :: PyPtr ) = try
398- x = PyJuliaValue_GetValue (xo)
399- display (ExtraNewline (x))
400- PyNone_New ()
401- catch err
402- PyErr_SetJuliaError (err)
403- PyNULL
404- end
300+ pyjlany_display (xo:: PyPtr , :: PyPtr ) =
301+ @pyjltry begin
302+ x = PyJuliaValue_GetValue (xo)
303+ display (ExtraNewline (x))
304+ PyNone_New ()
305+ end PyNULL
405306
406307pyjlany_help (xo:: PyPtr , :: PyPtr ) =
407- try
308+ @pyjltry begin
408309 x = Docs. doc (PyJuliaValue_GetValue (xo))
409310 display (ExtraNewline (x))
410311 PyNone_New ()
411- catch err
412- PyErr_SetJuliaError (err)
413- PyNULL
414- end
312+ end PyNULL
415313
416314pyjlany_positive (xo:: PyPtr ) =
417- try
418- PyObject_From (+ (PyJuliaValue_GetValue (xo)))
419- catch err
420- PyErr_SetJuliaError (err)
421- PyNULL
422- end
315+ @pyjltry PyObject_From (+ (PyJuliaValue_GetValue (xo))) PyNULL
423316
424317pyjlany_negative (xo:: PyPtr ) =
425- try
426- PyObject_From (- (PyJuliaValue_GetValue (xo)))
427- catch err
428- PyErr_SetJuliaError (err)
429- PyNULL
430- end
318+ @pyjltry PyObject_From (- (PyJuliaValue_GetValue (xo))) PyNULL
431319
432320pyjlany_absolute (xo:: PyPtr ) =
433- try
434- PyObject_From (abs (PyJuliaValue_GetValue (xo)))
435- catch err
436- PyErr_SetJuliaError (err)
437- PyNULL
438- end
321+ @pyjltry PyObject_From (abs (PyJuliaValue_GetValue (xo))) PyNULL
439322
440323struct pyjlany_binop{F}
441324 f:: F
445328 PyJuliaValue_Check (yo) || return PyNotImplemented_New ()
446329 x = PyJuliaValue_GetValue (xo)
447330 y = PyJuliaValue_GetValue (yo)
448- try
449- PyObject_From (f. f (x, y))
450- catch err
451- if err isa MethodError && err. f === f. f
452- PyNotImplemented_New ()
453- else
454- PyErr_SetJuliaError (err)
455- PyNULL
456- end
457- end
331+ @pyjltry PyObject_From (f. f (x, y)) PyNULL (MethodError, f. f)=> NotImplemented
458332end
459333
460334pyjlany_power (xo:: PyPtr , yo:: PyPtr , zo:: PyPtr ) = begin
@@ -463,29 +337,11 @@ pyjlany_power(xo::PyPtr, yo::PyPtr, zo::PyPtr) = begin
463337 x = PyJuliaValue_GetValue (xo)
464338 y = PyJuliaValue_GetValue (yo)
465339 if PyNone_Check (zo)
466- try
467- PyObject_From (x^ y)
468- catch err
469- if err isa MethodError && err. f === ^
470- PyNotImplemented_New ()
471- else
472- PyErr_SetJuliaError (err)
473- PyNULL
474- end
475- end
340+ @pyjltry PyObject_From (x^ y) PyNULL (MethodError, ^ )=> NotImplemented
476341 else
477342 PyJuliaValue_Check (zo) || return PyNotImplemented_New ()
478343 z = PyJuliaValue_GetValue (zo)
479- try
480- PyObject_From (powermod (x, y, z))
481- catch err
482- if err isa MethodError && err. f === powermod
483- PyNotImplemented_New ()
484- else
485- PyErr_SetJuliaError (err)
486- PyNULL
487- end
488- end
344+ @pyjltry PyObject_From (powermod (x, y, z)) PyNULL (MethodError, powermod)=> NotImplemented
489345 end
490346end
491347
0 commit comments