Добавить
global ISC_CACHE
как первая строка вашей функции. Вы присваиваете ему значение внутри тела функции, поэтому python предполагает, что это локальная переменная. Однако, как локальная переменная, вы не можете вернуть ее, не присвоив ей сначала.
Оператор global сообщает парсеру, что переменная находится вне области действия функции, поэтому вы можете вернуть ее значение.
В ответ на ваш второй опубликованный пример вы увидите, как анализатор работает с глобальными переменными, когда вы не пытаетесь их назначить.
Это может прояснить ситуацию:
x = 5 # global scope
def f():
print x # This must be global, since it is never assigned in this function
>>> f()
5
def g():
x = 6 # This is a local variable, since we're assigning to it here
print x
>>> g()
6
def h():
print x # Python will parse this as a local variable, since it is assigned to below
x = 7
>>> h()
UnboundLocalError: local variable 'x' referenced before assignment
def i():
global x # Now we're making this a global variable, explicitly
print x
x = 8 # This is the global x, too
>>> x # Print the global x
5
>>> i()
5
>>> x # What is the global x now?
8