12

Very simple question, but I can't find the answer to it. My IDE vs code (pylance) give me the warning/hint for a being possibly unbound. Why is this? How do I fix it?

def f():
    for i in range(4):
        a = 1
        print(a)

    return a
Gang
  • 185
  • 1
  • 1
  • 9

1 Answers1

24

Because range(4) might be something empty (if you overwrite the built-in range), in which case the loop body will never run and a will not get assigned. Which is a problem when it's supposed to get returned.

Maybe you can tell your IDE to ignore this and not show the warning. Or assign some meaningful default to a before the loop.

superb rain
  • 5,300
  • 2
  • 11
  • 25
  • 6
    If you assign e.g. `None` before the loop, you can `assert is not None` afterwards to get the inferred type from `int | None` back to `int` and still catch errors early where the loop indeed didn't execute (instead of returning the `None` default value). – xuiqzy Jan 30 '21 at 12:16