Проверка ошибок утверждения с помощью If else python

#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, если произойдет какая-либо ошибка утверждения