@@ -63,17 +63,21 @@ PyUFunc_ValidateCasting(PyUFuncObject *ufunc,
63
63
if (i < nin ) {
64
64
if (!PyArray_CanCastArrayTo (operands [i ], dtypes [i ], casting )) {
65
65
PyObject * errmsg ;
66
- errmsg = PyUString_FromFormat ("Cannot cast ufunc %s "
67
- "input from " , ufunc_name );
68
- PyUString_ConcatAndDel (& errmsg ,
69
- PyObject_Repr ((PyObject * )PyArray_DESCR (operands [i ])));
70
- PyUString_ConcatAndDel (& errmsg ,
71
- PyUString_FromString (" to " ));
72
- PyUString_ConcatAndDel (& errmsg ,
73
- PyObject_Repr ((PyObject * )dtypes [i ]));
74
- PyUString_ConcatAndDel (& errmsg ,
75
- PyUString_FromFormat (" with casting rule %s" ,
76
- npy_casting_to_string (casting )));
66
+ PyObject * fmt = PyUString_FromFormat (
67
+ "Cannot cast ufunc %s input from {} to {} with casting "
68
+ "rule %s" ,
69
+ ufunc_name , npy_casting_to_string (casting )
70
+ );
71
+ if (fmt == NULL ) {
72
+ return -1 ;
73
+ }
74
+ errmsg = PyObject_CallMethod (fmt , "format" , "OO" ,
75
+ (PyObject * )PyArray_DESCR (operands [i ]),
76
+ (PyObject * )dtypes [i ]);
77
+ Py_DECREF (fmt );
78
+ if (errmsg == NULL ){
79
+ return -1 ;
80
+ }
77
81
PyErr_SetObject (PyExc_TypeError , errmsg );
78
82
Py_DECREF (errmsg );
79
83
return -1 ;
@@ -82,17 +86,22 @@ PyUFunc_ValidateCasting(PyUFuncObject *ufunc,
82
86
if (!PyArray_CanCastTypeTo (dtypes [i ],
83
87
PyArray_DESCR (operands [i ]), casting )) {
84
88
PyObject * errmsg ;
85
- errmsg = PyUString_FromFormat ("Cannot cast ufunc %s "
86
- "output from " , ufunc_name );
87
- PyUString_ConcatAndDel (& errmsg ,
88
- PyObject_Repr ((PyObject * )dtypes [i ]));
89
- PyUString_ConcatAndDel (& errmsg ,
90
- PyUString_FromString (" to " ));
91
- PyUString_ConcatAndDel (& errmsg ,
92
- PyObject_Repr ((PyObject * )PyArray_DESCR (operands [i ])));
93
- PyUString_ConcatAndDel (& errmsg ,
94
- PyUString_FromFormat (" with casting rule %s" ,
95
- npy_casting_to_string (casting )));
89
+ PyObject * fmt = PyUString_FromFormat (
90
+ "Cannot cast ufunc %s output from {} to {} with casting "
91
+ "rule %s" ,
92
+ ufunc_name , npy_casting_to_string (casting )
93
+ );
94
+ if (fmt == NULL ) {
95
+ return -1 ;
96
+ }
97
+ errmsg = PyObject_CallMethod (fmt , "format" , "OO" ,
98
+ (PyObject * )dtypes [i ],
99
+ (PyObject * )PyArray_DESCR (operands [i ])
100
+ );
101
+ Py_DECREF (fmt );
102
+ if (errmsg == NULL ){
103
+ return -1 ;
104
+ }
96
105
PyErr_SetObject (PyExc_TypeError , errmsg );
97
106
Py_DECREF (errmsg );
98
107
return -1 ;
0 commit comments