Я пытаюсь написать блок try/except, который объявляет две переменные, которые извлекают свои значения через ConfigParser
. Проблема, с которой я сталкиваюсь, заключается в том, что возможно, что один или оба объявляемых значения могут отсутствовать в определенном разделе и должны быть установлены в None
в таком случае. Я знаю, что я могу просто добавить значения под каждым конфигурационным файлом, однако не все конфиги согласованы в именах разделов, что превращается в очень утомительную задачу.Попробуйте/За исключением блока, объявляющего несколько значений
Есть ли лучший способ достичь следующего блока try/except, не разбивая их на два отдельных?
try:
ports = getCfgStr(sectName, 'ports')
terminal = getCfgStr(sectName, 'terminals')
except KeyError:
# Need to set ports or terminal to None depending on which raised the KeyError
Мой обходной путь решения:
try:
ports = getCfgStr(sectName, 'ports')
except KeyError:
ports = None
try:
terminals = getCfgStr(sectName, 'terminals')
except KeyError:
terminals = None
Для тех, кто заинтересован, [PEP-463] (http://legacy.python.org/dev/peps/pep-0463/) решает эту проблему. – swenzel
Почему один блок try/except неправилен: если 'ports' является тем, который генерирует' KeyError', вы даже не попытаетесь получить значение для 'terminal'. При написании блока 'try' каждая строка кода должна быть необходима только в том случае, если строки перед ней не создают исключение. – chepner
Что такое 'getCfgStr'? –