diff --git a/src/language/utils/OFStream.cpp b/src/language/utils/OFStream.cpp
index 3bc5e29911abb17840429bb6025232c1cb5f4711..39b7cc8ecedee3ff76e3d6d54790d25f90d01569 100644
--- a/src/language/utils/OFStream.cpp
+++ b/src/language/utils/OFStream.cpp
@@ -6,7 +6,12 @@ OFStream::OFStream(const std::string& filename)
 {
   if (parallel::rank() == 0) {
     m_fstream.open(filename);
-    Assert(m_ostream == nullptr, "ostream was already defined");
-    m_ostream = &m_fstream;
+    if (m_fstream.is_open()) {
+      m_ostream = &m_fstream;
+    } else {
+      std::stringstream error_msg;
+      error_msg << "cannot create file " << rang::fgB::yellow << filename << rang::style::reset;
+      throw NormalError(error_msg.str());
+    }
   }
 }
diff --git a/src/language/utils/OStream.hpp b/src/language/utils/OStream.hpp
index 6abbcf668c2e56ed668898d619004d0434cd0cb3..d9410e25e35d2a3e9d5ac147911f6464d3b71eb7 100644
--- a/src/language/utils/OStream.hpp
+++ b/src/language/utils/OStream.hpp
@@ -16,7 +16,7 @@ class OStream
   friend std::shared_ptr<const OStream>
   operator<<(const std::shared_ptr<const OStream>& os, const DataT& t)
   {
-    Assert(os.use_count() > 0);
+    Assert(os.use_count() > 0, "non allocated stream");
     if (os->m_ostream != nullptr) {
       *os->m_ostream << t;
     }
diff --git a/tests/test_OFStream.cpp b/tests/test_OFStream.cpp
index 6170ad55f58b169748c1f7a663018845daa3f91b..32b4ff21b8e725dcaff822b586f9810d617d3a4d 100644
--- a/tests/test_OFStream.cpp
+++ b/tests/test_OFStream.cpp
@@ -46,4 +46,13 @@ TEST_CASE("OFStream", "[language]")
 
     REQUIRE(not std::filesystem::exists(filename));
   }
+
+  SECTION("invalid filename")
+  {
+    if (parallel::rank() == 0) {
+      const std::string filename = "badpath/invalidpath/ofstream";
+
+      REQUIRE_THROWS_WITH(std::make_shared<OFStream>(filename), "error: cannot create file " + filename);
+    }
+  }
 }
diff --git a/tests/test_OStream.cpp b/tests/test_OStream.cpp
index 9e01e5016246d9187f0f44f4b0d434d0e5570200..417db374ee366531623af397e2d62e78d1c83475 100644
--- a/tests/test_OStream.cpp
+++ b/tests/test_OStream.cpp
@@ -25,4 +25,12 @@ TEST_CASE("OStream", "[language]")
 
     REQUIRE(sstr.str() == "foo3 bar");
   }
+
+#ifndef NDEBUG
+  SECTION("non allocated stream")
+  {
+    std::shared_ptr<OStream> bad_os;
+    REQUIRE_THROWS_WITH((bad_os << 2), "non allocated stream");
+  }
+#endif   // NDEBUG
 }