Except with empty tuple

Terry Reedy tjreedy at udel.edu
Wed Oct 16 13:56:18 EDT 2019


On 10/16/2019 1:18 PM, MRAB wrote:
> On 2019-10-16 15:03, Antoon Pardon wrote:
>> I would like to verify I understand correctly.
>>
>> It is about the following construct:
>>
>>      try:
>>          statement1
>>          statement2
>>          ...
>>      except ():
>>          pass
>>
>> As far as I understand and my tests seem to confirm this, this
>> is equivallent to just
>>
>>      statement1
>>      statement2
>>      ...
>>
>> Am I correct or did I miss something?

Since except (): cannot catch anything, the two are externally 
equivalent given a particular behavior of the statements.  Internally, 
the first takes a bit longer unless the irrelevant try-except is 
optimized away, but checking for this case would be a waste of time.

> What if there's an exception?

Antoon is asking whether the two snippets are equivalent for any 
particular behavior of the sequence of statements.

>  >>> def test_1():
> ...     try:
> ...         print('statement1')
> ...         raise ValueError()
> ...         print('statement2')
> ...     except ():
> ...         pass
> ...     print('statement3')
> ...
>  >>> def test_2():
> ...     print('statement1')

If you add raise ValueError() to test with the same snippet behavior

> ...     print('statement2')
> ...     print('statement3')
> ...
>  >>> test_1()
> statement1
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
>    File "<stdin>", line 4, in test_1
> ValueError

The point is that except (): cannot not catch any exception.

>  >>> test_2()

Then you get the same output.

-- 
Terry Jan Reedy





More information about the Python-list mailing list