Error: maximum recurtion depth exceeded

Hello!
I get the following error:
Traceback (most recent call last):
File “df.py”, line 82, in
uu = direct(q)
File “df.py”, line 75, in direct
L = FHv*dx
File “/usr/lib/python3/dist-packages/ufl/exproperators.py”, line 193, in _mul
return _mult(self, o)
File “/usr/lib/python3/dist-packages/ufl/exproperators.py”, line 124, in _mult
s1, s2 = a.ufl_shape, b.ufl_shape
File “/usr/lib/python3/dist-packages/ufl/coefficient.py”, line 73, in ufl_shape
return self._ufl_shape
File “/usr/lib/python3/dist-packages/dolfin/function/expression.py”, line 432, in getattr
return self._parameters[name]
File “/usr/lib/python3/dist-packages/dolfin/function/expression.py”, line 432, in getattr
return self._parameters[name]
File “/usr/lib/python3/dist-packages/dolfin/function/expression.py”, line 432, in getattr
return self._parameters[name]
[Previous line repeated 327 more times]
RecursionError: maximum recursion depth exceeded

my code is:
from dolfin import *
from math import *
import matplotlib as plt
import sys
import numpy as np

l = 1.0
T = 1.0

Nx = 151
Nt = 51

h = l/Nx
tau = T/Nt

Create mesh and define function space

mesh = UnitSquareMesh(Nx, Nt)
V = FunctionSpace(mesh, “Lagrange”, 1)

Define boundary condition

def boundary1(x, on_boundary):
return on_boundary and near(x[0], 0.0)

def boundary2(x, on_boundary):
return on_boundary and near(x[0], l)

def boundary3(x, on_boundary):
return on_boundary and near(x[1], 0.0)

def boundary4(x, on_boundary):
return on_boundary and near(x[1], T)

k = Expression(“1 + x[0]x[0]", degree=1)
F = Expression("31
pow(x[0], 5) - 63pow(x[0], 4) + 59pow(x[0], 3) - 43pow(x[0], 2) + 18x[0] - 2”, degree=2)
H = Expression(“10exp(-x[1])", degree=1)
u0 = Expression("10
x[0]x[0] pow(1 - x[0], 3)”, degree=1)
u_answer = Expression(“10 * exp(-x[1]) * x[0]*x[0] * pow(1 - x[0], 3)”, degree=2)

class ExprFromArray(Expression):
def init(self, arr, h, **kwargs):
self._arr = arr
self._h = h
def eval(self, values, x):
i = int(x[1] / self._h)
values[0] = self._arr[i]

xmesh = UnitIntervalMesh(Nx)
tmesh = UnitIntervalMesh(Nt)
xV = FunctionSpace(xmesh, “Lagrange”, 1)
tV = FunctionSpace(tmesh, “Lagrange”, 1)

s = np.zeros((51))
tt = np.zeros((51))

for i in range(51):
tt[i] = itau
s[i] = 10
exp(-tt[i])

q = ExprFromArray(s, tau, degree=2)

def direct(H):
u = TrialFunction(V)
v = TestFunction(V)

bc1 = DirichletBC(V, Constant(0.0), boundary2)
bc2 = DirichletBC(V, u0, boundary3)
bcs = [bc1, bc2]

A = k*u.dx(0)*v.dx(0)*dx + u.dx(1)*v*dx	
L = F*H*v*dx

u = Function(V)
solve(A == L, u, bcs)

return u

uu = direct(q)
print(uu)