Re: [Python-Dev] python2.7 infinite recursion when loading pickled object
Terry Reedy wrote: > On 8/11/2014 5:10 AM, Schmitt Uwe (ID SIS) wrote: > > Python usage questions should be directed to python-list, for instance. > >> I discovered a problem using cPickle.loads from CPython 2.7.6. > > The problem is your code having infinite recursion. You only discovered > it with pickle. > > >> The last line in the following code raises an infinite recursion >> >> class T(object): >> >> def __init__(self): >> self.item = list() >> >> def __getattr__(self, name): >> return getattr(self.item, name) > > This is a (common) bug in your program. __getattr__ should call > self.__dict__(name) to avoid the recursion. Read again. The OP tries to delegate attribute lookup to an (existing) attribute. IMO the root cause of the problem is that pickle looks up __dunder__ methods in the instance rather than the class. ___ Python-Dev mailing list [email protected] https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] python2.7 infinite recursion when loading pickled object
Chris Angelico wrote: > On Mon, Aug 11, 2014 at 9:40 PM, Peter Otten <[email protected]> wrote: >> Read again. The OP tries to delegate attribute lookup to an (existing) >> attribute. >> >> IMO the root cause of the problem is that pickle looks up __dunder__ >> methods in the instance rather than the class. > > The recursion comes from the attempted lookup of self.item, when > __init__ hasn't been called. You are right. Sorry for the confusion. ___ Python-Dev mailing list [email protected] https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] Function to handle None in sort operation, was Re: python 3 niggle: None < 1 raises TypeError
M.-A. Lemburg wrote: > IMO, it was a mistake to have None return a TypeError in > comparisons, since it makes many typical data operations > fail, e.g. > > Python2: l = [1,2,None,4,5,None,6] l.sort() l > [None, None, 1, 2, 4, 5, 6] > > Python3: l = [1,2,None,4,5,None,6] l.sort() > Traceback (most recent call last): > File "", line 1, in > TypeError: unorderable types: NoneType() < int() While it is trivial to fix >>> sorted([1,2,None,4,5,None,6], ... key=lambda x: (x is None, x)) [1, 2, 4, 5, 6, None, None] maybe the key should be given a name like functools.none_first/none_last in order to offer a standard approach? On the other hand I'm not sure I like none_last(x) < none_last(y) ___ Python-Dev mailing list [email protected] https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
[Python-Dev] Re: Inadequate error reporting during function call setup stage
On 21/02/2021 23:06, Terry Reedy wrote: On 2/21/2021 12:04 PM, Paul Sokolovsky wrote: Traceback (most recent call last): File "pseudoc_tool.py", line 91, in first_class_function_value(func, **pass_params) TypeError: print() got an unexpected keyword argument 'noann' This is not typical behavior in current Python (3.8+). The way I understand it's not about print(), it's about disambiguating multiple functions with the same name. Example: PS > type .\ambiguous_names.py import random def do_stuff(): pass f = do_stuff def do_stuff(a, b): pass g = do_stuff random.choice([f, g])(42) PS > py .\ambiguous_names.py Traceback (most recent call last): File "...\ambiguous_names.py", line 13, in random.choice([f, g])(42) TypeError: do_stuff() missing 1 required positional argument: 'b' The traceback gives no clue which of the two do_stuff() functions caused the error, you have to check both implementations. If that is a comman problem one might consider including module name and co_firstlineno in the message, or at least adding the relevant do_stuff() function to the exception's args. ___ Python-Dev mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/[email protected]/message/E7OUHLWXP3NHEM3UZOBWP5AQRSFL5RDO/ Code of Conduct: http://python.org/psf/codeofconduct/
Re: [Python-Dev] type.__subclasses__() doesn't work
Steven D'Aprano wrote: > On Wed, Oct 09, 2013 at 12:20:18PM +0200, Antoine Pitrou wrote: >> >> Hello, >> >> Just noticed the following quirk: >> >> >>> type.__subclasses__() >> Traceback (most recent call last): >> File "", line 1, in >> TypeError: descriptor '__subclasses__' of 'type' object needs an argument >> >> Yet it would be nice to know about the subclasses of type. > > py> type.__subclasses__(type) > [, ] The underlying problem seems to be that there is no helper function to bypass the instance attribute. Compare: >>> class T(type): ... def __len__(self): return 0 ... >>> class A(metaclass=T): ... def __len__(self): return 1 ... >>> A.__len__() Traceback (most recent call last): File "", line 1, in TypeError: __len__() missing 1 required positional argument: 'self' >>> len(A) 0 So should there be a subclasses() function, in the operator module perhaps? ___ Python-Dev mailing list [email protected] https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Rethinking intern() and its data structure
John Arbash Meinel wrote: > Not as big of a difference as I thought it would be... But I bet if > there was a way to put the random shuffle in the inner loop, so you > weren't accessing the same identical 25k keys internally, you might get > more interesting results. You can prepare a few random samples during startup: $ python -m timeit -s"from random import sample; d = dict.fromkeys(xrange(10**7)); nextrange = iter([sample(xrange(10**7),25000) for i in range(200)]).next" "for x in nextrange(): d.get(x)" 10 loops, best of 3: 20.2 msec per loop To put it into perspective: $ python -m timeit -s"d = dict.fromkeys(xrange(10**7)); nextrange = iter([range(25000)]*200).next" "for x in nextrange(): d.get(x)" 100 loops, best of 3: 10.9 msec per loop Peter ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Python3 regret about deleting list.sort(cmp=...)
Guido van Rossum wrote:
> I was just reminded that in Python 3, list.sort() and sorted() no
> longer support the cmp (comparator) function argument. The reason is
> that the key function argument is always better. But now I have a
> nagging doubt about this:
>
> I recently advised a Googler who was sorting a large dataset and
> running out of memory. My analysis of the situation was that he was
> sorting a huge list of short lines of the form "shortstring,integer"
> with a key function that returned a tuple of the form ("shortstring",
> integer). Using the key function argument, in addition to N short
> string objects, this creates N tuples of length 2, N more slightly
> shorter string objects, and N integer objects. (Not to count a
> parallel array of N more pointers.) Given the object overhead, this
> dramatically increased the memory usage. It so happens that in this
> particular Googler's situation, memory is constrained but CPU time is
> not, and it would be better to parse the strings over and over again
> in a comparator function.
>
> But in Python 3 this solution is no longer available. How bad is that?
> I'm not sure. But I'd like to at least get the issue out in the open.
While there are other arguments to reintroduce cmp (or less_than instead?)
the memory problem could also be addressed with a dont_cache_keys flag or
max_cache_keys limit.
Peter
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Playing with a new theme for the docs, iteration 2
Georg Brandl wrote: > Here's another try, mainly with default browser font size, more contrast > and collapsible sidebar again: > > http://www.python.org/~gbrandl/build/html2/ Nice! Lightweight and readable. >From the bikeshedding department: * Inlined code doesn't need the gray background. The bold font makes it stand out enough. * Instead of the box consider italics or another color for [New in ...] text. * Nobody is going to switch off the prompts for interactive sessions. * Maybe the Next/Previous Page headers on the left could link to the respective page. * Short descriptions in the module index don't need italics. * The disambiguation in the index table could use a different style instead of the parentheses. ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Playing with a new theme for the docs, iteration 2
Serhiy Storchaka wrote: >> * Maybe the Next/Previous Page headers on the left could link to the >> respective page. > > Do you mean next/previous links in header/footer? No, I mean the two sections in the sidebar on the left, below "Table of Contents". ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Checking if unsigned int less then zero.
Dmitriy Tochansky wrote:
> Playing with cpython source, I found some strange strings in
> socketmodule.c:
>
> ---
> if (flowinfo < 0 || flowinfo > 0xf) {
> PyErr_SetString(
> PyExc_OverflowError,
> "getsockaddrarg: flowinfo must be 0-1048575.");
> return 0;
> }
> ---
>
> ---
> if (flowinfo < 0 || flowinfo > 0xf) {
> PyErr_SetString(PyExc_OverflowError,
> "getsockaddrarg: flowinfo must be 0-1048575.");
> return NULL;
> }
> ---
>
> The flowinfo variable declared few strings above as unsgined int. Is
> there any practical sense in this check? Seems like gcc just removes
> this check. I think any compiler will generate code that checks as
> unsigned, for example in x86 its JAE/JGE. May be this code is for "bad"
> compilers or exotic arch?
I think you are right, the < 0 check is redundant. The developers probably
forgot to remove it when
http://bugs.python.org/issue9975
was fixed.
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] Should urlencode() sort the query parameters (if they come from a dict)?
Guido van Rossum wrote:
> I wonder if it wouldn't make sense to change urlencode() to generate
> URLs that don't depend on the hash order, for all versions of Python
> that support PYTHONHASHSEED? It seems a one-line fix:
>
> query = query.items()
>
> with this:
>
> query = sorted(query.items())
>
> This would not prevent breakage of unit tests, but it would make a
> much simpler fix possible: simply sort the parameters in the URL.
>
> Thoughts?
There may be people who mix bytes and str or pass other non-str keys:
>>> query = {b"a":b"b", "c":"d", 5:6}
>>> urlencode(query)
'a=b&c=d&5=6'
>>> sorted(query.items())
Traceback (most recent call last):
File "", line 1, in
TypeError: unorderable types: str() < bytes()
Not pretty, but a bugfix should not break such constructs.
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] experimental: Misc/NEWS included in docs
Georg Brandl wrote: > at http://docs.python.org/3.3/whatsnew/news.html, there is now > a rendering of Misc/NEWS with tracker links and a crude filtering > capability. I thought that this will complement the "whatsnew" > documents nicely for people looking for more detail. > > Please let me know if it's useful, or what could be done to make > it *more* useful. Maybe you could supress those sections that become empty when a filter is applied. ___ Python-Dev mailing list [email protected] http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
Re: [Python-Dev] [Python-checkins] python/dist/src/Lib urllib.py, 1.169, 1.170
Am Samstag, 10. September 2005 04:27 schrieb [EMAIL PROTECTED]:
> Update of /cvsroot/python/python/dist/src/Lib
> In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3622
>
> Modified Files:
> urllib.py
> Log Message:
> Simplify and speed-up quote_plus().
>
> Index: urllib.py
> ===
> RCS file: /cvsroot/python/python/dist/src/Lib/urllib.py,v
> retrieving revision 1.169
> retrieving revision 1.170
> diff -u -d -r1.169 -r1.170
> --- urllib.py 9 Sep 2005 22:27:13 - 1.169
> +++ urllib.py 10 Sep 2005 02:27:41 - 1.170
> @@ -1115,12 +1115,9 @@
> def quote_plus(s, safe = ''):
> """Quote the query fragment of a URL; replacing ' ' with '+'"""
> if ' ' in s:
> -l = s.split(' ')
> -for i in range(len(l)):
> -l[i] = quote(l[i], safe)
> -return '+'.join(l)
> -else:
> -return quote(s, safe)
> +s = s.replace(' ', '+')
> +safe += '+'
> +return quote(s, safe)
>
> def urlencode(query,doseq=0):
> """Encode a sequence of two-element tuples or dictionary into a URL
> query string.
You also change the behaviour. Before:
>>> urllib.quote_plus("alpha+beta gamma")
'alpha%2Bbeta+gamma'
After:
>>> urllib.quote_plus("alpha+beta gamma")
'alpha+beta+gamma'
Is that intentional? If so, you also have to update the documentation, which
currently reads:
quote_plus(string[, safe])
... Plus signs in the original string are escaped unless they are included in
safe. ...
Peter
___
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com
