py: Check that sequence has 2 elements for dict iterable constructor.
This commit is contained in:
parent
be019ce063
commit
686afc5c0a
2
py/obj.c
2
py/obj.c
|
@ -280,7 +280,7 @@ void mp_obj_get_array_fixed_n(mp_obj_t o, uint len, mp_obj_t **items) {
|
||||||
mp_obj_list_get(o, &seq_len, items);
|
mp_obj_list_get(o, &seq_len, items);
|
||||||
}
|
}
|
||||||
if (seq_len != len) {
|
if (seq_len != len) {
|
||||||
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_IndexError, "requested length %d but object has length %d", len, seq_len));
|
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "requested length %d but object has length %d", len, seq_len));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "object '%s' is not a tuple or list", mp_obj_get_type_str(o)));
|
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "object '%s' is not a tuple or list", mp_obj_get_type_str(o)));
|
||||||
|
|
|
@ -50,9 +50,11 @@ STATIC mp_obj_t dict_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp
|
||||||
mp_obj_t iterable = mp_getiter(args[0]);
|
mp_obj_t iterable = mp_getiter(args[0]);
|
||||||
mp_obj_t dict = mp_obj_new_dict(0);
|
mp_obj_t dict = mp_obj_new_dict(0);
|
||||||
// TODO: support arbitrary seq as a pair
|
// TODO: support arbitrary seq as a pair
|
||||||
mp_obj_tuple_t *item;
|
mp_obj_t item;
|
||||||
while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) {
|
while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) {
|
||||||
mp_obj_dict_store(dict, item->items[0], item->items[1]);
|
mp_obj_t *sub_items;
|
||||||
|
mp_obj_get_array_fixed_n(item, 2, &sub_items);
|
||||||
|
mp_obj_dict_store(dict, sub_items[0], sub_items[1]);
|
||||||
}
|
}
|
||||||
return dict;
|
return dict;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,3 +2,13 @@ print(dict([(1, "foo")]))
|
||||||
d = dict([("foo", "foo2"), ("bar", "baz")])
|
d = dict([("foo", "foo2"), ("bar", "baz")])
|
||||||
print(sorted(d.keys()))
|
print(sorted(d.keys()))
|
||||||
print(sorted(d.values()))
|
print(sorted(d.values()))
|
||||||
|
|
||||||
|
try:
|
||||||
|
dict(((1,),))
|
||||||
|
except ValueError:
|
||||||
|
print("ValueError")
|
||||||
|
|
||||||
|
try:
|
||||||
|
dict(((1, 2, 3),))
|
||||||
|
except ValueError:
|
||||||
|
print("ValueError")
|
||||||
|
|
Loading…
Reference in New Issue