diff --git a/tools/sdbusplus/templates/interface.server.cpp.mako b/tools/sdbusplus/templates/interface.server.cpp.mako
index ddb7537..202d409 100644
--- a/tools/sdbusplus/templates/interface.server.cpp.mako
+++ b/tools/sdbusplus/templates/interface.server.cpp.mako
@@ -104,8 +104,8 @@
 
 } // anonymous namespace
 
-auto ${classname}::convert${e.name}FromString(const std::string& s) ->
-        ${e.name}
+auto ${classname}::convertStringTo${e.name}(const std::string& s) noexcept ->
+        std::optional<${e.name}>
 {
     auto i = std::find_if(
             std::begin(mapping${classname}${e.name}),
@@ -113,7 +113,7 @@
             [&s](auto& e){ return 0 == strcmp(s.c_str(), std::get<0>(e)); } );
     if (std::end(mapping${classname}${e.name}) == i)
     {
-        throw sdbusplus::exception::InvalidEnumString();
+        return std::nullopt;
     }
     else
     {
@@ -121,6 +121,21 @@
     }
 }
 
+auto ${classname}::convert${e.name}FromString(const std::string& s) ->
+        ${e.name}
+{
+    auto r = convertStringTo${e.name}(s);
+
+    if (!r)
+    {
+        throw sdbusplus::exception::InvalidEnumString();
+    }
+    else
+    {
+        return *r;
+    }
+}
+
 std::string ${classname}::convert${e.name}ToString(${classname}::${e.name} v)
 {
     auto i = std::find_if(
diff --git a/tools/sdbusplus/templates/interface.server.hpp.mako b/tools/sdbusplus/templates/interface.server.hpp.mako
index 0fc1849..db8d110 100644
--- a/tools/sdbusplus/templates/interface.server.hpp.mako
+++ b/tools/sdbusplus/templates/interface.server.hpp.mako
@@ -1,6 +1,7 @@
 #pragma once
 #include <limits>
 #include <map>
+#include <optional>
 #include <sdbusplus/sdbus.hpp>
 #include <sdbusplus/server.hpp>
 #include <sdbusplus/utility/dedup_variant.hpp>
@@ -122,9 +123,19 @@
          *  @param[in] s - The string to convert in the form of
          *                 "${interface.name}.<value name>"
          *  @return - The enum value.
+         *
+         *  @note Throws if string is not a valid mapping.
          */
         static ${e.name} convert${e.name}FromString(const std::string& s);
 
+        /** @brief Convert a string to an appropriate enum value.
+         *  @param[in] s - The string to convert in the form of
+         *                 "${interface.name}.<value name>"
+         *  @return - The enum value or std::nullopt
+         */
+        static std::optional<${e.name}> convertStringTo${e.name}(
+                const std::string& s) noexcept;
+
         /** @brief Convert an enum value to a string.
          *  @param[in] e - The enum to convert to a string.
          *  @return - The string conversion in the form of
