Skip to content

Commit c966095

Browse files
author
Christopher Doris
committed
use @pyjltry everywhere
1 parent 295f0fe commit c966095

File tree

11 files changed

+187
-578
lines changed

11 files changed

+187
-578
lines changed

src/cpython/juliaany.jl

Lines changed: 32 additions & 176 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
pyjlany_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

118
pyjlany_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

2115
pyjlany_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
4732
end
4833

4934
propertytype(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
8763
end
8864

8965
pyjl_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
148108
end
149109

150110
pyjlany_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
197136
end
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
243171
end
244172

245173
pyjlany_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
263182
end
264183

265184
pyjlany_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
296208
end
297209

298210
const ALL_MIMES = [
@@ -374,16 +286,7 @@ pyjlany_repr_mimebundle(xo::PyPtr, args::PyPtr, kwargs::PyPtr) = begin
374286
end
375287

376288
pyjlany_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

388291
pyjlany_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)
394297
Base.show(io::IO, m::MIME"text/plain", x::ExtraNewline) = (show(io, m, x.value); println(io))
395298
Base.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

406307
pyjlany_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

416314
pyjlany_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

424317
pyjlany_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

432320
pyjlany_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

440323
struct pyjlany_binop{F}
441324
f::F
@@ -445,16 +328,7 @@ end
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
458332
end
459333

460334
pyjlany_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
490346
end
491347

0 commit comments

Comments
 (0)