[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2019-12-14 Thread Géry

Géry  added the comment:

@ncoghlan

> Reviewing the discussion, I assume this was left open to cover reordering the 
> __aenter__ and __aexit__ checks for async with, but that can just as easily 
> be handled as a separate issue (which would also be clearer at the NEWS 
> level).

Here it is: https://bugs.python.org/issue39048

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2019-12-14 Thread Géry

Change by Géry :


--
pull_requests: +17081
pull_request: https://github.com/python/cpython/pull/17609

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2019-12-14 Thread Géry

Change by Géry :


--
pull_requests:  -17079

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2019-12-14 Thread Géry

Change by Géry :


--
pull_requests: +17079
pull_request: https://github.com/python/cpython/pull/17609

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2019-12-13 Thread Géry

Change by Géry :


--
nosy: +maggyero

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2017-04-04 Thread Nick Coghlan

Nick Coghlan added the comment:

Reviewing the discussion, I assume this was left open to cover reordering the 
__aenter__ and __aexit__ checks for async with, but that can just as easily be 
handled as a separate issue (which would also be clearer at the NEWS level).

--
stage: patch review -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2017-04-03 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Can this be closed now?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2017-04-01 Thread Martin Panter

Changes by Martin Panter :


--
nosy:  -martin.panter

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2017-03-31 Thread Serhiy Storchaka

Changes by Serhiy Storchaka :


--
pull_requests:  -1060

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2017-03-31 Thread Donald Stufft

Changes by Donald Stufft :


--
pull_requests: +1060

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-24 Thread Roundup Robot

Roundup Robot added the comment:

New changeset e11df6aa5bf1 by Raymond Hettinger in branch '3.6':
Issue #27100:  Silence deprecation warning in Lib/test/test_with.py
https://hg.python.org/cpython/rev/e11df6aa5bf1

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-23 Thread Raymond Hettinger

Raymond Hettinger added the comment:

> Since the patch is simple and fixes a regression introduced
> just before releasing beta 4, I'm fine with fixing it. We are
> trying to support tests warnings-free. Some buildbots can run 
> tests with -We.

+1

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-23 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

Oh, how I missed this? I usually run tests with -Wa.

Since the patch is simple and fixes a regression introduced just before 
releasing beta 4, I'm fine with fixing it. We are trying to support tests 
warnings-free. Some buildbots can run tests with -We.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-23 Thread Martin Panter

Martin Panter added the comment:

The tests changes also produce a DeprecationWarning:

==
ERROR: testEnterAttributeError1 (test.test_with.FailureTestCase)
--
Traceback (most recent call last):
  File "/home/proj/python/cpython/Lib/test/test_with.py", line 120, in 
testEnterAttributeError1
self.assertRaisesRegexp(AttributeError, '__enter__', fooLacksEnter)
  File "/home/proj/python/cpython/Lib/unittest/case.py", line 1311, in 
deprecated_func
DeprecationWarning, 2)
DeprecationWarning: Please use assertRaisesRegex instead.

The fix is simple and just affects the tests, but since most people don’t seem 
to worry about warnings, I guess this can wait for 3.6 to be released before 
committing the fix.

--
Added file: http://bugs.python.org/file45618/regexp-deprecated.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Yuri, do you want to do the same for async-with?

--
assignee: rhettinger -> yselivanov
priority: release blocker -> normal

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 749c5d6c4ba5 by Raymond Hettinger in branch '3.6':
Issue #27100:  Fix ref leak
https://hg.python.org/cpython/rev/749c5d6c4ba5

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

The patch LGTM.

--
assignee: serhiy.storchaka -> rhettinger

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Serhiy, do you care to double check this patch?

Martin, I'll leave the async_with for Yuri to fix-up.  I believe that is his 
code, so he should do the honors.

--
assignee: rhettinger -> serhiy.storchaka
nosy: +serhiy.storchaka, yselivanov

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Raymond Hettinger

Changes by Raymond Hettinger :


Added file: http://bugs.python.org/file45604/fix_with_refleak.diff

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Raymond Hettinger

Changes by Raymond Hettinger :


--
Removed message: http://bugs.python.org/msg281495

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Martin, do you want to make a patch?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Serhiy Storchaka

Changes by Serhiy Storchaka :


--
priority: normal -> release blocker

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Martin Panter

Martin Panter added the comment:

Hmm, it seems I already discovered this leak six months ago: 
https://bugs.python.org/review/27100

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-22 Thread Martin Panter

Martin Panter added the comment:

https://mail.python.org/pipermail/python-checkins/2016-November/147171.html

test_collections leaked [0, 0, 7] memory blocks, sum=7
test_contextlib leaked [38, 38, 38] references, sum=114
test_contextlib leaked [13, 12, 12] memory blocks, sum=37
test_descr leaked [164, 164, 164] references, sum=492
test_descr leaked [59, 59, 59] memory blocks, sum=177
test_functools leaked [0, 3, 1] memory blocks, sum=4
test_with leaked [37, 37, 37] references, sum=111
test_with leaked [13, 13, 13] memory blocks, sum=39

Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', 
'3:3:/home/psf-users/antoine/refleaks/reflogWMjqsJ', '--timeout', '7200']

Looking at the code change, it looks like you aren’t releasing __enter__ if the 
__exit__ lookup fails.

A separate question: why not swap the “async with” __aenter__ and __aexit__ 
code at the same time?

--
nosy: +martin.panter
status: closed -> open

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-21 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Thanks for the patch Jonathan.  Nick, thanks for chiming in.

--
resolution:  -> fixed
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-11-21 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 3aafb232f2db by Raymond Hettinger in branch '3.6':
Issue #27100:  With statement reports missing __enter__ before __exit__.  
(Contributed by Jonathan Ellington.)
https://hg.python.org/cpython/rev/3aafb232f2db

--
nosy: +python-dev

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-09-29 Thread Nick Coghlan

Nick Coghlan added the comment:

Due to the expected semantics of AttributeError being relatively precise, 
changing to a protocol check rather than just changing the order we look up the 
protocol attributes would also involving changing from AttributeError to 
TypeError.

Since that's a potentially more disruptive change and just changing the order 
of the checks is likely sufficient to reduce confusion, the latter approach is 
preferable, at least for now (if folks are still getting confused by the time 
3.7 rolls around, then that option would be worth reconsidering).

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-09-28 Thread Spencer Brown

Spencer Brown added the comment:

Alternatively, SETUP_WITH could additionally check for the other method, and 
raise an AttributeError with a custom message mentioning both methods.

--
nosy: +Spencer Brown

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-09-28 Thread Ned Deily

Changes by Ned Deily :


--
stage:  -> patch review
versions: +Python 3.6

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-09-28 Thread Nick Coghlan

Nick Coghlan added the comment:

+1 for 3.6 from me - as you say, this is fixing a usability bug in the error 
handling rather than being a new feature.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-09-27 Thread Raymond Hettinger

Raymond Hettinger added the comment:

> I don't see any problem with switching the lookup order now,
> and I agree that should be less confusing,

Thanks Nick.  I concur as well and will apply this.

Would it be reasonable to apply this to 3.6?  IMO, it isn't a new feature, it 
is more of a usability bug due to an oversight.

--
nosy: +ned.deily

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-09-27 Thread Serhiy Storchaka

Changes by Serhiy Storchaka :


--
versions: +Python 3.7 -Python 3.6

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-05-24 Thread Nick Coghlan

Nick Coghlan added the comment:

As Jonathan notes, the cause for confusion here is that we currently retrieve 
the attributes in the opposite order from the way we execute them, prompting 
the "Why is it looking for __exit__ first?", "Oh, __enter__ must be optional, 
so it didn't care that it was missing" train of thought.

If I recall correctly, rather than stemming from any particular design 
principle, the current behaviour is an artifact of the initial implementation 
that didn't use any dedicated opcodes: since CPython uses a stack-based VM, we 
needed __enter__ to be above __exit__ on the stack, and the most efficient way 
to achieve that was to do the attribute lookups in the reverse order of 
invocation.

When SETUP_WITH was introduced, that original method lookup ordering (and 
associated error message precedence) was preserved, even though the technical 
rationale for that ordering no longer applied.

Given that, I don't see any problem with switching the lookup order now, and I 
agree that should be less confusing, given that the most obvious explanation 
for getting an error message about __enter__ when both are missing is that the 
interpreter tries to call __enter__ before it tries to do anything with 
__exit__. (That intuitive explanation still isn't 100% accurate, but it's 
closer than thinking __enter__ is optional)

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-05-23 Thread Benjamin Peterson

Benjamin Peterson added the comment:

I don't completely understand. If you get an AttributeError for __enter__, will 
you think only an __enter__ is required?

--
nosy: +benjamin.peterson

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-05-23 Thread Raymond Hettinger

Raymond Hettinger added the comment:

Nick, I've seen the come-up several times with people learning about context 
managers.  The current error message seems cause confusion because it checks 
for __exit__ before __enter__, implying that the __enter__ is optional which it 
isn't.   Do you have any objections testing for __enter__ first?

--
assignee:  -> rhettinger
nosy: +ncoghlan
versions: +Python 3.6

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-05-23 Thread Xiang Zhang

Xiang Zhang added the comment:

This seems to be designed. From PEP343 it tells clearly:

If either of the relevant methods are not found
as expected, the interpreter will raise AttributeError, in the
order that they are tried (__exit__, __enter__).

But currently I don't find out why.

--
nosy: +xiang.zhang

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27100] Attempting to use class with both __enter__ & __exit__ undefined yields __exit__ attribute error

2016-05-23 Thread Jonathan Ellington

New submission from Jonathan Ellington:

Attempting to use class that has both __exit__() and __enter__() undefined as a 
context manager yields an AttributeError referring to __exit__:

>>> class A():
... pass
...
>>> with A():
... pass
...
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: A instance has no attribute '__exit__'


Knowing that the 'with' statement should first execute __enter__, this is 
unexpected.

The patch ensures the attribute error refers to __enter__() when both methods 
are undefined.

--
components: Interpreter Core
files: with.patch
keywords: patch
messages: 266219
nosy: ellingtonjp, rhettinger
priority: normal
severity: normal
status: open
title: Attempting to use class with both __enter__ & __exit__ undefined yields 
__exit__ attribute error
type: behavior
Added file: http://bugs.python.org/file42962/with.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com