Итак, я знаю, что вы можете использовать блоки try/except для управления выводом ошибок, например:
try:
print("ok")
print(str.translate)
print(str.foo)
except AttributeError:
print("oops, found an error")
print("done")
... что дает следующий результат:
ok
<method 'translate' of 'str' objects>
oops, found an error
done
Теперь есть способ сделать следующее с помощью цикла while, такого как while not AttributeError, например:
while not AttributeError:
print("ok")
print(str.translate)
print(str.foo)
print("done")
что даст тот же результат, что и выше, только без oops, found an error? Это уменьшит потребность в блоках типа except: pass, которые необходимы, но немного бессмысленны, если вам нечего делать в блоке except.
Я пробовал while not AttributeError и while not AttributeError(), которые полностью пропускают что-либо в блоке while. Итак, есть ли способ сделать это в Python?
Редактировать: Это действительно не петля как таковой, но блок while будет запущен и продолжит работу, если обнаружит ошибку, и просто продолжит работу, если достигнет конца.
Если не возникнет исключение, будет ли он что-нибудь повторять?
@DavisHerring Нет, он будет запускать блок до конца, и он будет продолжать работать независимо от того, была ли ошибка или нет. Если произошла ошибка, она закончилась бы раньше и просто продолжила.
Это бесконечный цикл? Какое условие остановки? Он ломается при возникновении исключения?
Это не то, как следует использовать исключения - используйте стандартную методологию try/except.
Помимо того факта, что зацикливание whileнет ... удивительно, этот новый синтаксис сохранил бы только одна линияexcept AttributeError: pass!






Вы можете попробовать что-нибудь вроде:
while True:
try:
print("ok")
print(str.translate)
print(str.foo)
except:
break
print('done')
Следующий код будет повторяться до тех пор, пока не обнаружит ошибку.
while True:
try:
print("ok")
print(str.translate)
print(str.foo)
except AttributeError:
print("oops, found an error")
break
print("done")
Вы можете вложить цикл while:
try:
while True:
print("ok")
print(str.translate)
print(str.foo)
except:
pass
print('done')
Вы должны видеть блоки
try/exceptкак «если все в порядке» / «еще». Python вызывает все ошибки, если вы хотите "пропустить" одну,except AttributeError: pass- это то, что вам нужно. Это не бессмысленно, вы прямо заявляете, что хотите пропустить эту ошибку (или применить другой процесс, или что-то еще). Обновлено: И нетwhile not AttributeError