diff --git a/cobra/core/model.py b/cobra/core/model.py
index <HASH>..<HASH> 100644
--- a/cobra/core/model.py
+++ b/cobra/core/model.py
@@ -334,6 +334,12 @@ class Model(Object):
         # First check whether the metabolites exist in the model
         metabolite_list = [x for x in metabolite_list
                            if x.id not in self.metabolites]
+
+        bad_ids = [m for m in metabolite_list
+                   if not isinstance(m.id, string_types) or len(m.id) < 1]
+        if len(bad_ids) != 0:
+            raise ValueError('invalid identifiers in {}'.format(repr(bad_ids)))
+
         for x in metabolite_list:
             x._model = self
         self.metabolites += metabolite_list
diff --git a/cobra/test/test_model.py b/cobra/test/test_model.py
index <HASH>..<HASH> 100644
--- a/cobra/test/test_model.py
+++ b/cobra/test/test_model.py
@@ -118,6 +118,8 @@ class TestReactions:
         benchmark(add_remove_metabolite)
 
     def test_add_metabolite(self, model):
+        with pytest.raises(ValueError):
+            model.add_metabolites(Metabolite())
         with model:
             with model:
                 reaction = model.reactions.get_by_id("PGI")
fix: check valid metabolite id

Ensure that metabolites to add have valid identifiers. Failure to do so
triggers confusing errors when populating solver.