@@ -329,17 +329,19 @@ STATIC mp_obj_t str_join(mp_obj_t self_in, mp_obj_t arg) {
329329 mp_obj_t * seq_items ;
330330 if (MP_OBJ_IS_TYPE (arg , & mp_type_tuple )) {
331331 mp_obj_tuple_get (arg , & seq_len , & seq_items );
332- } else if (MP_OBJ_IS_TYPE (arg , & mp_type_list )) {
333- mp_obj_list_get (arg , & seq_len , & seq_items );
334332 } else {
335- goto bad_arg ;
333+ if (!MP_OBJ_IS_TYPE (arg , & mp_type_list )) {
334+ // arg is not a list, try to convert it to one
335+ arg = mp_type_list .make_new ((mp_obj_t )& mp_type_list , 1 , 0 , & arg );
336+ }
337+ mp_obj_list_get (arg , & seq_len , & seq_items );
336338 }
337339
338340 // count required length
339341 int required_len = 0 ;
340342 for (int i = 0 ; i < seq_len ; i ++ ) {
341343 if (!MP_OBJ_IS_STR (seq_items [i ])) {
342- goto bad_arg ;
344+ nlr_raise ( mp_obj_new_exception_msg ( & mp_type_TypeError , "join expected a list of str's" )) ;
343345 }
344346 if (i > 0 ) {
345347 required_len += sep_len ;
@@ -363,9 +365,6 @@ STATIC mp_obj_t str_join(mp_obj_t self_in, mp_obj_t arg) {
363365
364366 // return joined string
365367 return mp_obj_str_builder_end (joined_str );
366-
367- bad_arg :
368- nlr_raise (mp_obj_new_exception_msg (& mp_type_TypeError , "?str.join expecting a list of str's" ));
369368}
370369
371370#define is_ws (c ) ((c) == ' ' || (c) == '\t')
0 commit comments