2014-12-11 4 views
0

У меня есть проблема. Я пытаюсь найти способ, которым я могу попробовать каждое утверждение в одном заявлении try.Попробуйте/За исключением ... попробуйте все, даже если ошибка

Например:

try: 
    funct1() 
    funct2() 
    funct3() 
except: 
    print("expected") 

try/except, как ожидается, в моем случае, так как одна из функций не получится. Как это сделать без нескольких try/except s или лучший способ сделать это?

В текущей ситуации, если функция funct2 не работает, funct3 не запускается.

+0

Вы пытались использовать try-except в функциях? – GLHF

+0

Вы действительно ожидаете от них исключения? –

+0

Я. Пожалуйста, прочитайте комментарий, который я сделал ниже. Он разъясняет все. – Richard

ответ

4

Вы можете поставить try/except в цикле:

for funct in (funct1, funct2, funct3): 
    try: 
     funct() 
    except Exception: # Catch something more specific if you can. 
     print("expected") 

Это гарантирует, что все функции выполняются, даже если один или более вызывает исключение.

+0

Это не работает в моем случае. Позвольте пояснить. Каждая функция - randomWidgetNameGoesHere.destroy(). Я не получаю «ожидаемого» в моем терминале только неприятную ошибку. Пожалуйста, прочитайте комментарий, который я сделал ниже, для qqvc для более широкого понимания. – Richard

+0

Вы можете поместить свои виджеты в список, а затем перебрать его, вызвав метод 'destroy' на каждом из блоков' try: '. Или, что еще лучше, поместите их в один и тот же контейнерный виджет, если сможете. Затем вам просто нужно уничтожить родителя. – iCodez

+0

Вложение всех виджетов в один и тот же контейнер отлично. Я просто не знаю, как это сделать. Поэтому я попытался/исключил. Спасибо, хотя я посмотрю. – Richard

0

По-моему, используйте try-except блоки в функциях. Потому что они ловят ошибки между связкой кодов. В большой программе это будет проблемой, если вы попытаетесь поймать все ошибки в одном. Итак, определите свои блоки , кроме, в ваших функциях, более понятными и полезными ,

+0

Я должен уточнить. Я делаю это, чтобы удалить виджеты в программе Tkinter GUI. Когда вы открываете программу, есть три варианта. У каждого варианта есть куча входных ящиков, ярлыков и т. Д. Я искал способ уничтожить все виджеты в каждом из них. Проблема в том, что я прибегал к try/except, чтобы попробовать все виджеты, потому что я не знаю, как поместить все виджеты в фрейм, а затем просто удалить фрейм. – Richard

+0

Мой совет: просто поставьте блок try-except, если вы думаете, что это ошибка. Это лучше, на мой взгляд. Если вам нужно использовать 10 раз, используйте 10 раз. Поэтому в вашей программе поместите свои виджеты между блоками try-except. Но если вы поймаете ВСЕ ошибки, это должно быть головной болью для вас. Вы не сможете увидеть, что не так с вашей программой. – GLHF

+0

В любом случае может быть ошибка, поскольку пользователь может выбирать опции в графическом интерфейсе произвольно. – Richard

Смежные вопросы