diff --git a/host-bmc/dbus_to_event_handler.cpp b/host-bmc/dbus_to_event_handler.cpp
index 7b2d207..ac8778f 100644
--- a/host-bmc/dbus_to_event_handler.cpp
+++ b/host-bmc/dbus_to_event_handler.cpp
@@ -80,6 +80,12 @@
 {
     // Encode PLDM platform event msg to indicate a state sensor change.
     // DSP0248_1.2.0 Table 19
+    if (!dbusMaps.contains(sensorId))
+    {
+        std::cerr << "Invalid sensor ID : " << sensorId << std::endl;
+        return;
+    }
+
     size_t sensorEventSize = PLDM_SENSOR_EVENT_DATA_MIN_LENGTH + 1;
     const auto& [dbusMappings, dbusValMaps] = dbusMaps.at(sensorId);
     for (uint8_t offset = 0; offset < dbusMappings.size(); ++offset)
@@ -151,7 +157,11 @@
         {
             pdr = reinterpret_cast<pldm_state_sensor_pdr*>(pdrEntry.data);
             SensorId sensorId = LE16TOH(pdr->sensor_id);
-            sensorHandlers.at(pdrType)(sensorId, dbusMaps);
+            if (sensorHandlers.contains(pdrType))
+            {
+                sensorHandlers.at(pdrType)(sensorId, dbusMaps);
+            }
+
             pdrRecord = sensorPDRs.getNextRecord(pdrRecord, pdrEntry);
         }
     }
diff --git a/libpldmresponder/platform_numeric_effecter.hpp b/libpldmresponder/platform_numeric_effecter.hpp
index 62228e0..8aeaaa1 100644
--- a/libpldmresponder/platform_numeric_effecter.hpp
+++ b/libpldmresponder/platform_numeric_effecter.hpp
@@ -251,21 +251,30 @@
         return rc;
     }
 
-    const auto& [dbusMappings, dbusValMaps] =
-        handler.getDbusObjMaps(effecterId);
-    DBusMapping dbusMapping{
-        dbusMappings[0].objectPath, dbusMappings[0].interface,
-        dbusMappings[0].propertyName, dbusMappings[0].propertyType};
     try
     {
-        dBusIntf.setDbusProperty(dbusMapping, dbusValue.value());
+        const auto& [dbusMappings, dbusValMaps] =
+            handler.getDbusObjMaps(effecterId);
+        DBusMapping dbusMapping{
+            dbusMappings[0].objectPath, dbusMappings[0].interface,
+            dbusMappings[0].propertyName, dbusMappings[0].propertyType};
+        try
+        {
+
+            dBusIntf.setDbusProperty(dbusMapping, dbusValue.value());
+        }
+        catch (const std::exception& e)
+        {
+            std::cerr << "Error setting property, ERROR=" << e.what()
+                      << " PROPERTY=" << dbusMapping.propertyName
+                      << " INTERFACE=" << dbusMapping.interface << " PATH="
+                      << dbusMapping.objectPath << "\n";
+            return PLDM_ERROR;
+        }
     }
-    catch (const std::exception& e)
+    catch (const std::out_of_range& e)
     {
-        std::cerr << "Error setting property, ERROR=" << e.what()
-                  << " PROPERTY=" << dbusMapping.propertyName << " INTERFACE="
-                  << dbusMapping.interface << " PATH=" << dbusMapping.objectPath
-                  << "\n";
+        std::cerr << "Unknown effecter ID : " << effecterId << e.what() << '\n';
         return PLDM_ERROR;
     }
 
diff --git a/libpldmresponder/platform_state_effecter.hpp b/libpldmresponder/platform_state_effecter.hpp
index ba1c9bd..5875f13 100644
--- a/libpldmresponder/platform_state_effecter.hpp
+++ b/libpldmresponder/platform_state_effecter.hpp
@@ -143,8 +143,8 @@
     }
     catch (const std::out_of_range& e)
     {
-        std::cerr << "the effecterId does not exist. effecter id: "
-                  << effecterId << e.what() << '\n';
+        std::cerr << "Unknown effecter ID : " << effecterId << e.what() << '\n';
+        return PLDM_ERROR;
     }
 
     return rc;
diff --git a/pldmtool/pldm_bios_cmd.cpp b/pldmtool/pldm_bios_cmd.cpp
index 68fc2d8..45d8f6e 100644
--- a/pldmtool/pldm_bios_cmd.cpp
+++ b/pldmtool/pldm_bios_cmd.cpp
@@ -354,7 +354,14 @@
         if (verbose)
         {
             output["AttributeHandle"] = attrHandle;
-            output["AttributeType"] = attrTypeMap.at(attrType);
+            if (attrTypeMap.contains(attrType))
+            {
+                output["AttributeType"] = attrTypeMap.at(attrType);
+            }
+            else
+            {
+                std::cout << "Get AttributeType failed.\n";
+            }
         }
         switch (attrType)
         {
@@ -533,7 +540,14 @@
             attrdata["AttributeHandle"] = attrHandle;
             attrdata["AttributeNameHandle"] =
                 displayStringHandle(attrNameHandle, stringTable);
-            attrdata["AttributeType"] = attrTypeMap.at(attrType);
+            if (attrTypeMap.contains(attrType))
+            {
+                attrdata["AttributeType"] = attrTypeMap.at(attrType);
+            }
+            else
+            {
+                std::cout << "Get AttributeType failed.\n";
+            }
 
             switch (attrType)
             {
diff --git a/pldmtool/pldm_platform_cmd.cpp b/pldmtool/pldm_platform_cmd.cpp
index 2c4a6df..18f0ef0 100644
--- a/pldmtool/pldm_platform_cmd.cpp
+++ b/pldmtool/pldm_platform_cmd.cpp
@@ -327,7 +327,15 @@
         }
 
         output["containerID"] = int(pdr->container_id);
-        output["associationType"] = assocationType.at(pdr->association_type);
+        if (assocationType.contains(pdr->association_type))
+        {
+            output["associationType"] =
+                assocationType.at(pdr->association_type);
+        }
+        else
+        {
+            std::cout << "Get associationType failed.\n";
+        }
         output["containerEntityType"] =
             getEntityName(pdr->container.entity_type);
         output["containerEntityInstanceNumber"] =
@@ -834,15 +842,30 @@
 
         for (size_t i = 0; i < compSensorCount; i++)
         {
+            if (sensorOpState.contains(stateField[i].sensor_op_state))
+            {
+                output.emplace(("sensorOpState[" + std::to_string(i) + "]"),
+                               sensorOpState.at(stateField[i].sensor_op_state));
+            }
 
-            output.emplace(("sensorOpState[" + std::to_string(i) + "]"),
-                           sensorOpState.at(stateField[i].sensor_op_state));
-            output.emplace(("presentState[" + std::to_string(i) + "]"),
-                           sensorPresState.at(stateField[i].present_state));
-            output.emplace(("previousState[" + std::to_string(i) + "]"),
-                           sensorPresState.at(stateField[i].previous_state));
-            output.emplace(("eventState[" + std::to_string(i) + "]"),
-                           sensorPresState.at(stateField[i].event_state));
+            if (sensorPresState.contains(stateField[i].present_state))
+            {
+                output.emplace(("presentState[" + std::to_string(i) + "]"),
+                               sensorPresState.at(stateField[i].present_state));
+            }
+
+            if (sensorPresState.contains(stateField[i].previous_state))
+            {
+                output.emplace(
+                    ("previousState[" + std::to_string(i) + "]"),
+                    sensorPresState.at(stateField[i].previous_state));
+            }
+
+            if (sensorPresState.contains(stateField[i].event_state))
+            {
+                output.emplace(("eventState[" + std::to_string(i) + "]"),
+                               sensorPresState.at(stateField[i].event_state));
+            }
         }
 
         pldmtool::helper::DisplayInJson(output);
