Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
686afc5c
Commit
686afc5c
authored
Apr 11, 2014
by
Damien George
Browse files
py: Check that sequence has 2 elements for dict iterable constructor.
parent
be019ce0
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/obj.c
View file @
686afc5c
...
...
@@ -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
);
}
if
(
seq_len
!=
len
)
{
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_
Index
Error
,
"requested length %d but object has length %d"
,
len
,
seq_len
));
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_
Value
Error
,
"requested length %d but object has length %d"
,
len
,
seq_len
));
}
}
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
)));
...
...
py/objdict.c
View file @
686afc5c
...
...
@@ -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
dict
=
mp_obj_new_dict
(
0
);
// TODO: support arbitrary seq as a pair
mp_obj_t
uple_t
*
item
;
mp_obj_t
item
;
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
;
}
...
...
tests/basics/dict-from-iter.py
View file @
686afc5c
...
...
@@ -2,3 +2,13 @@ print(dict([(1, "foo")]))
d
=
dict
([(
"foo"
,
"foo2"
),
(
"bar"
,
"baz"
)])
print
(
sorted
(
d
.
keys
()))
print
(
sorted
(
d
.
values
()))
try
:
dict
(((
1
,),))
except
ValueError
:
print
(
"ValueError"
)
try
:
dict
(((
1
,
2
,
3
),))
except
ValueError
:
print
(
"ValueError"
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment