Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: while not Exception

So I am aware you can use try/except blocks to manipulate the output of errors, like so:

try:
    print("ok")
    print(str.translate)
    print(str.foo)
except AttributeError:
    print("oops, found an error")

print("done")

...which gives the following output:

ok
<method 'translate' of 'str' objects>
oops, found an error
done

Now, is there a way to do the following with a while loop, like while not AttributeError, like this:

while not AttributeError:
    print("ok")
    print(str.translate)
    print(str.foo)
print("done")

which would give the same output as above, just without oops, found an error? This would reduce the need for except: pass type blocks, which are necessary but a little pointless if you have nothing to do in the except block.

I tried while not AttributeError and while not AttributeError(), which both just completely skip anything in the while block. So, is there a way to do this in Python?

Edit: This really isn't a loop per se, but the while block would run, and continue on if it encounters an error, and just continue on if it reaches the end.

like image 396
miike3459 Avatar asked Dec 29 '18 17:12

miike3459


3 Answers

Can you try something like:

while True:
    try:
        print("ok")
        print(str.translate)
        print(str.foo)
    except:
        break
print('done')
like image 174
Lucas Resende Avatar answered Oct 21 '22 04:10

Lucas Resende


The following code will loop until it encounters an error.

while True:
  try:
    print("ok")
    print(str.translate)
    print(str.foo)
  except AttributeError:
    print("oops, found an error")
    break
  print("done")
like image 36
Ghorich Avatar answered Oct 21 '22 04:10

Ghorich


You can use suppress() as an alternative to try/except/pass available for python 3.4+

from contextlib import suppress

while True:
    with suppress(AttributeError):
        print("ok")
        print(str.translate)
        print(str.foo)
    break
print('done')
like image 1
Legended Avatar answered Oct 21 '22 04:10

Legended