Create an interpreter for "Counter" "Counter" is a language I've created for the purpose of this question.

Rules


Commands are read from left to right from the first character.
Each command may be executed as it is read, or you may execute all commands together at the end.
In case of an error, all commands up till the error must be executed.
A program is written in exactly one line.
Data is stored in counters. At the start, there is exactly one counter. More can be created and deleted.
A counter holds an integer value between -100 and 100 (limits inclusive).
Exactly one counter is the selected counter at any point in time.
Counters are arranged in a 1d array, so one can move left (previous) or right (next) to change selected counter.


Commands


Any number between -100 and 100 - Set the currently selected counter to that value.
c - Create a counter immediately after the currently selected counter, make it the selected counter, and set it to 0.
d - Delete the currently selected counter, and make the previous one selected. If it is the first one, this is an error.
+ - Make the next counter the selected one.
- - Make the previous counter the selected one. (Ensure that this command is not immediately followed by a number.)
o - Output the value in the selected counter, followed by a space.
? - If the value in the selected counter is 0, apply the d command on it.
# - If the value in the selected counter is 0, ignore the next command.
 (space) - No meaning, but is to be treated like a command, if preceded by a #. Used to demarcate numbers.


Errors


Going left of the leftmost counter, or right of the rightmost counter.
Deleting the first counter.
Encountering a # as the last command. (Of course, this means all commands will get executed anyways)
A command that does not exist.
A number that's too long.


Task

Create an interpreter in any language. Code will be in a file or given as input (your choice). Shortest code wins.

Lengthy example

Consider the code:

7cc--13 12do?+?#0#o3od-7o


Here is a breakdown of the program. [] indicates the selected counter.

Cmd   Memory    Output

7     [7]
c     7 [0]
c     7 0 [0]
-     7 [0] 0
-13   7 [-13] 0
      7 [-13] 0
12    7 [12] 0
d     [7] 0
o     [7] 0     7
?     [7] 0
+     7 [0]
?     [7]
#     [7]
0     [0]
#     [0]
o     [0]
3     [3]
o     [3]       3
d     This is an error. Program terminates here.


Total output 7 3
Python3, 403 530 bytes
This is seriously golfable, but I can't think of how...
Thanks to @cat for 127 bytes!!! (I'm really bad at golfing in Python)
c=input()
a=[0]
s=0
i=0
def g(i,n):
 p=i
 if n:i+=1
 while c[i].isdigit():i+=1
 a[s]=int(c[p:i]);return i-1
def e():
 a.pop(s);s-=1
while i&lt;len(c):
 d=c[i]
 if d.isdigit():i=g(i,0)
 elif d=='c':s+=1;a.insert(s,0)
 elif d=='d':e()
 elif d=='+':s+=1
 elif d=='-':
  if c[i+1].isdigit():i=g(i,1)
  else:s-=1
 elif d=='o':print(a[s],end=' ')
 elif d=='?':
  if a[s]==0:e()
 elif d=='#':
  if a[s]==0:i+=1
 i+=1