b.Assert(err, qt.Not(qt.IsNil))
        b.Assert(err.Error(), qt.Contains, `failed to load config: invalid timeZone for language "en": unknown time zone America/LosAngeles`)
 }
+
+// Issue 8835
+func TestTimeOnError(t *testing.T) {
+       b := newTestSitesBuilder(t)
+
+       b.WithTemplates("index.html", `time: {{ time "2020-10-20" "invalid-timezone" }}`)
+       b.WithContent("p1.md", "")
+
+       b.Assert(b.BuildE(BuildCfg{}), qt.Not(qt.IsNil))
+
+}
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.ToInt,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.After,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Default,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.MD5,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.GetCSV,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Dump,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Base64Decode,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Print,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return h },
+                       Context: func(args ...interface{}) (interface{}, error) { return h, nil },
                }
 
                // We just add the Hugo struct as the namespace here. No method mappings.
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, s.Hugo())
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, s.Hugo())
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Config,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Humanize,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
        Name string
 
        // This is the method receiver.
-       Context func(v ...interface{}) interface{}
+       Context func(v ...interface{}) (interface{}, error)
 
        // Additional info, aliases and examples, per method name.
        MethodMappings map[string]TemplateFuncMethodMapping
 
        buf.WriteString(fmt.Sprintf(`%q: {`, t.Name))
 
-       ctx := t.Context()
+       ctx, err := t.Context()
+       if err != nil {
+               return nil, err
+       }
        ctxType := reflect.TypeOf(ctx)
        for i := 0; i < ctxType.NumMethod(); i++ {
                method := ctxType.Method(i)
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                return ns
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Translate,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Add,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Unmarshal,
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Getenv,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Include,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Split,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.IsMap,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Get,
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.CSS,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
                s := d.Site
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return s },
+                       Context: func(args ...interface{}) (interface{}, error) { return s, nil },
                }
 
                if s == nil {
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, s)
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, s)
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Chomp,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Exists,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 package time
 
 import (
+       "errors"
+
        "github.com/gohugoio/hugo/deps"
        "github.com/gohugoio/hugo/langs"
        "github.com/gohugoio/hugo/tpl/internal"
 
                ns := &internal.TemplateFuncsNamespace{
                        Name: name,
-                       Context: func(args ...interface{}) interface{} {
+                       Context: func(args ...interface{}) (interface{}, error) {
                                // Handle overlapping "time" namespace and func.
                                //
                                // If no args are passed to `time`, assume namespace usage and
 
                                switch len(args) {
                                case 0:
-                                       return ctx
+                                       return ctx, nil
                                case 1:
-                                       t, err := ctx.AsTime(args[0])
-                                       if err != nil {
-                                               return err
-                                       }
-                                       return t
+                                       return ctx.AsTime(args[0])
                                case 2:
-                                       t, err := ctx.AsTime(args[0], args[1])
-                                       if err != nil {
-                                               return err
-                                       }
-                                       return t
+                                       return ctx.AsTime(args[0], args[1])
 
                                // 3 or more arguments. Currently not supported.
                                default:
-                                       return "Invalid arguments supplied to `time`. Refer to time documentation: https://gohugo.io/functions/time/"
+                                       return nil, errors.New("Invalid arguments supplied to `time`. Refer to time documentation: https://gohugo.io/functions/time/")
                                }
                        },
                }
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.Emojify,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
 }
 
 
                ns := &internal.TemplateFuncsNamespace{
                        Name:    name,
-                       Context: func(args ...interface{}) interface{} { return ctx },
+                       Context: func(args ...interface{}) (interface{}, error) { return ctx, nil },
                }
 
                ns.AddMethodMapping(ctx.AbsURL,
 
        }
 
        c.Assert(found, qt.Equals, true)
-       c.Assert(ns.Context(), hqt.IsSameType, &Namespace{})
+       ctx, err := ns.Context()
+       c.Assert(err, qt.IsNil)
+       c.Assert(ctx, hqt.IsSameType, &Namespace{})
+
 }