My love of Jython knows many bounds... (UnboundLocalError on ValueError!)

Had this pop up when a script ran about 20 minutes ago:

E [c.i.i.c.s.TimerScriptTask     ] [20:33:28.567]: Error executing global timer script: customer/ranger_device_clean @180,000ms . Repeat errors of this type will be logged as 'debug' messages. 
com.inductiveautomation.ignition.common.script.JythonExecException: Traceback (most recent call last):
  File "<TimerScript:customer/ranger_device_clean @180,000ms >", line 1, in <module>
  File "<module:ranger_device_scan>", line 262, in clean_devices
  File "<module:shared.modbus>", line 19, in parse_modbus_map_csv
  File "<module:shared.ranger_csv_helpers>", line 15, in parse_csv
UnboundLocalError: local variable 'ValueError' referenced before assignment

Looking at line 15 in that bottom script, the failing line is:

raise ValueError("Map CSV malformed")

I mean, I know about the issues that can happen with memory leaks and persistent objects right around Jython instance restarts, but ValueError should be built-in to Jython!

I can promise we are not intentionally creating our own ValueError class anywhere, and I just did a quick grep and didn't find any typos around ValueError being used. I feel like this is just the most corner-case bug in Jython I've bumped into.

And I suspect if I just touch the python files and nudge the project that it will go away and I will not see it again for months.

:scream:

Might be this: