@capink: it is best to avoid nesting field expressions in basic templates. The text inserted by the nested expression is processed again when evaluating the outer expression, which can lead to errors. Following this guidance, the first expression that handles not having a series should be
Code:
{author}{series:| - |}{series_index:| [|]} - {title}
This works because series_index is always empty if series is empty.