|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] python3 issues
On Tue, Mar 26, 2019 at 10:06:48PM +0100, Hans van Kranenburg wrote:
> On 3/26/19 7:18 PM, M A Young wrote:
> > On Tue, 26 Mar 2019, Wei Liu wrote:
> >
> >> On Tue, Mar 26, 2019 at 01:16:35PM +0000, Wei Liu wrote:
> >>> On Mon, Mar 25, 2019 at 10:20:05PM +0000, YOUNG, MICHAEL A. wrote:
> >>>> if ty.init_fn is not None:
> >>>> --- xen-4.12.0-rc6/tools/pygrub/src/GrubConf.py.orig 2019-03-24
> >>>> 22:44:05.502581989 +0000
> >>>> +++ xen-4.12.0-rc6/tools/pygrub/src/GrubConf.py 2019-03-24
> >>>> 22:49:14.025934786 +0000
> >>>> @@ -230,10 +230,10 @@
> >>>> def _get_default(self):
> >>>> return self._default
> >>>> def _set_default(self, val):
> >>>> - if val == "saved":
> >>>> + if val == "saved" or not val.isdecimal():
> >>
> >> Your change suggested there could be a non-decimal string that is not
> >> "saved" -- is this really needed?
> >
> > It is getting set to ${next_entry} presumably from the clause
> >
> > if [ "${next_entry}" ] ; then
> > set default="${next_entry}"
> > set next_entry=
> > save_env next_entry
> > set boot_once=true
> > else
> > set default="${saved_entry}"
> > fi
> >
> > in the grub.cfg file giving the error
> >
> > File "/usr/lib64/python3.7/site-packages/grub/GrubConf.py", line 239, in
> > _set_default
> > if self._default < 0:
> > TypeError: '<' not supported between instances of 'str' and 'int'
> >
> > I didn't see this with python 2 before the patch so I assume python3 is
> > more fussy.
>
> Comparison is also used for sorting.
>
> In Python 2, numeric values always sort before strings. So, for example:
>
> == sorted(['a','b','c', 1, 2, 3])
> [1, 2, 3, 'a', 'b', 'c']
>
> However, this behavior also easily leads to bugs, for example when
> someone forgets to convert strings that hold numeric values to actual
> numbers and still compares things, which silently introduces unintended
> behavior.
>
> So, the above if self._default < 0 will just always be False if
> self._default is a string. I didn't read the context of these lines, but
> this looks like an actual bug currently.
>
> Python 3 no longer allows comparing string and int, because it doesn't
> make sense.
>
> == sorted([1,2,3,'a','b','c'])
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> TypeError: unorderable types: str() < int()
Thanks for the detailed explanation!
I think the original behaviour is not very nice. Python lacking type
annotation doesn't help either.
>
> So I guess that if the contents are expected to be "saved" or a number
> as string like "1", "2", then:
>
> 1. check for "saved"
> 2. try: int(val) except: blah
> 3. etc
I think a better way is to use string conversation all the way -- it
doesn't make sense for an API to return string sometimes and integers
sometimes. I will give it a stab.
Wei.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |