-1

Why val can't access inside bar after declare new val's value inside bar?

def foo() -> None:
        val = 'not change yet'
        def bar() -> None:
            print(val)        # Error: local variable 'val' referenced before assignment
            val = 'changed'
            print(val)
        bar()
foo()

How can I overcome the issue?
PS: I don't want to put val outside foo.

Zigatronz
  • 134
  • 1
  • 8

1 Answers1

1

You should define val as nonlocal.

def foo() -> None:
        val = 'not change yet'
        def bar() -> None:
            nonlocal val
            print(val)        # Error: local variable 'val' referenced before assignment
            val = 'changed'
            print(val)
        bar()
foo()

Take a look here: W3Schools

alanturing
  • 214
  • 1
  • 8