On Saturday, March 16, 2013 4:19:34 PM UTC-5, Oscar Benjamin wrote:
>
> NameErrors can occur conditionally depending on e.g. the
> arguments to a function. Consider the following script:
>
> # tmp.py
> def broken(x):
> if x > 2:
> print(x)
> else:
> print(undefined_name)
>
> broken(1)
Why would anyone write code like that? That's like arming your toilet paper
holder with a bomb set to explode if the RPMs of the spinning roll exceed a
small threshold. Sure, you could do it, but why the hell would you? The only
way your code could be any worse is by picking a random RPM threshold every
morning!
import random
from home.bathroom import ToiletPaperHolder
RPMS = range(100)
def maybeGoBoom(event):
maxRpm = random.choice(RPMS)
if event.RPM > maxRpm:
roll.explode()
tph = ToiletPaperHolder()
if not tph.has_roll():
tph.load_roll()
roll = tph.get_active_roll()
roll.bind("<Spin>", maybeGoBoom)
> The traceback shows the arguments passed to the broken
> function that caused the NameError to be generated.
> Different arguments would not have generated the
> NameError. This information can be useful if the logic of
> the function in question is complicated. It also hints at
> why you were calling the function and what your code is
> trying to do.
If you want to observe your code "in action" there are much better ways than
eyeball-parsing lines and lines of trackbacks. The code you posted is nonsense,
maybe you can provide a better example that will convince me, but that one
failed miserably.
--
http://mail.python.org/mailman/listinfo/python-list