Причина вы получаете это потому, что, когда вы выполнили это задание в вашей функции:
A = [7, 8, 9]
интерпретатор будет теперь видеть A
как локально связанной переменной. Итак, что же будет теперь, глядя на это условие:
if(len(A)>0):
будет на самом деле бросить свой первый UnboundLocalError
исключение, потому что, в связи с тем, как уже упоминалось, вы никогда не объявлял global A
в вашей b
функции и вы также создал локально связанную переменную A = [7, 8, 9]
, вы пытаетесь использовать локальный A
, прежде чем вы его объявите.
Вы на самом деле сталкиваются с той же проблемой при попытке сделать это:
A.remove(2)
Чтобы решить эту проблему, по отношению к вашему коду, просто объявить global A
обратно в b()
функции.
def b():
global A
if(len(A)>0):
A=[7,8,9]
else:
if(A[3]==4):
A.remove(2)
Однако, тем лучше, идеально и рекомендуемый способ сделать это, чтобы не использовать глобальные и просто передать аргументы вашей функции
A = [1, 2, 3, 4]
def main(list_of_things):
# do whatever operations you want to do here
b(list_of_things)
def b(list_of_things):
# do things with list_of_things
main(A)
работает просто отлично для меня, на Python 3.4.3 и Python 2.7.12. – Li357
Невозможно воспроизвести. Отлично работает для меня, Python 3.5. Это ваш настоящий код? Потому что, возможно, в вашем реальном коде есть что-то, что вы думаете, что не вызывает на самом деле проблемы. – idjaw
Работает на python 2.7, 3.5 – Juggernaut