`eval_streams` parameter of `train_exp` can't be null.
🐛 **Describe the bug**
When directly using `train_exp` on a Strategy with `eval_every` >= 0 and `train_streams` set to null, the eval_stream is not set to the given experience as described in the doc, causing an error in `_periodic_eval`.

🐜 **To Reproduce**
```python
from avalanche.benchmarks.classic import SplitMNIST
from avalanche.models import SimpleMLP
from avalanche.training.strategies import Naive

from torch.optim import SGD
from torch.nn import CrossEntropyLoss

scenario = SplitMNIST(n_experiences=5)
model = SimpleMLP(num_classes=scenario.n_classes)
cl_strategy = Naive(
    model, SGD(model.parameters(), lr=0.001, momentum=0.9),
    CrossEntropyLoss(), train_mb_size=500, eval_mb_size=100, train_epochs=1,
    eval_every=0)

results = []
for experience in scenario.train_stream:

    # This line works
    cl_strategy.train_exp(experience, eval_streams=[scenario.train_stream])

    # This line breaks
    cl_strategy.train_exp(experience, eval_streams=None)
```

🐝 **Expected behavior**
I think the most intuitive behavior would be to create an evaluation stream only composed of the given training experience.

diff --git a/avalanche/training/strategies/base_strategy.py b/avalanche/training/strategies/base_strategy.py
index dbd2a20e..27301291 100644
--- a/avalanche/training/strategies/base_strategy.py
+++ b/avalanche/training/strategies/base_strategy.py
@@ -238,9 +238,6 @@ class BaseStrategy:
             experiences = [experiences]
         if eval_streams is None:
             eval_streams = [experiences]
-        for i, exp in enumerate(eval_streams):
-            if not isinstance(exp, Sequence):
-                eval_streams[i] = [exp]
 
         self.before_training(**kwargs)
         for self.experience in experiences:
@@ -250,19 +247,25 @@ class BaseStrategy:
         res = self.evaluator.get_last_metrics()
         return res
 
-    def train_exp(self, experience: Experience, eval_streams, **kwargs):
+    def train_exp(self, experience: Experience, eval_streams=None, **kwargs):
         """
         Training loop over a single Experience object.
 
         :param experience: CL experience information.
         :param eval_streams: list of streams for evaluation.
-            If None: use training experiences for evaluation.
+            If None: use the training experience for evaluation.
             Use [] if you do not want to evaluate during training.
         :param kwargs: custom arguments.
         """
         self.experience = experience
         self.model.train()
 
+        if eval_streams is None:
+            eval_streams = [experience]
+        for i, exp in enumerate(eval_streams):
+            if not isinstance(exp, Sequence):
+                eval_streams[i] = [exp]
+
         # Data Adaptation (e.g. add new samples/data augmentation)
         self.before_train_dataset_adaptation(**kwargs)
         self.train_dataset_adaptation(**kwargs)
['avalanche/training/strategies/base_strategy.py']