#python #python-3.x #if-statement #assertion
Вопрос:
Из следующего кода, если 4-й блок If удовлетворяет, то остальные операторы в соответствии с тем же будут выполнены, иначе будут выполнены операторы утверждения. Теперь, случайно, если какой-либо оператор утверждения завершится ошибкой утверждения, я хочу выполнить тот же блок кода, который находится под 4-м блоком If. Как это сделать?
def step_impl(context, status, exp_date, owner, reg_date, man_yr, vchl_make, vchl_code): if context.conv_exp_date < context.conv_expnd_date: if context.conv_reg_date >= '01-09-2018': if man_yr == context.expctd_manu_year: if not context.json_response: print("empty response") json_data = context.payload sys.stdout = open("OD_Plans.log", "a") print("Previous Policy Status=" " " status) print("expiry date=" " " exp_date) print("Owner=" " " owner) print("Registration Date=" " " reg_date) print("Manufacturing Year=" " " man_yr) print("Veichle Maker=" " " vchl_make) print("Maker Code=" " " vchl_code) print(json.dumps(json_data, indent=2)) else: assert context.json_response is not None assert float(context.json_response[0]['base_premium']) > float(1) assert float(context.json_response[0]['total_premium']) > float(1) assert float(context.json_response[0]['tax']) > float(1) print(context.json_response[0]["tax"]) else: pass else: pass else: pass
Комментарии:
1. Используйте конструкцию try/except для изящной обработки любой ошибки.
2. Примечание: поскольку
'01-09-2018'
это строка, сравнение для «дат» даже дат в виде строк может не иметь смысла. Например: попробуйте'01-09-2018' > '01-09-1018'
3. @mechanical_meat Я пробовал использовать try, но даже после подлинного сбоя тест отображается как пройденный в отчете allure. Также моя цель состоит в том, чтобы запустить блок кода 4-го оператора If, если произойдет какая-либо ошибка утверждения
Ответ №1:
Чтобы перехватывать ошибки утверждений, вы можете использовать блок try/except внутри своего блока else
:
else: try: assert context.json_response is not None assert float(context.json_response[0]['base_premium']) > float(1) assert float(context.json_response[0]['total_premium']) > float(1) assert float(context.json_response[0]['tax']) > float(1) print(context.json_response[0]["tax"]) except AssertionError: # do stuff
Комментарии:
1. если использовать только попытку, то даже после сбоя тест отображается как пройденный. Также моя цель состоит в том, чтобы запустить блок кода 4-го оператора If, если произойдет какая-либо ошибка утверждения