UnboundLocalError บนตัวแปรโลคัลเมื่อกำหนดใหม่หลังจากการใช้ครั้งแรก
รหัสต่อไปนี้ทำงานได้ตามที่คาดไว้ใน Python 2.5 และ 3.0: a, b, c = (1, 2, 3) print(a, b, c) def test(): print(a) print(b) print(c) # (A) #c+=1 # (B) test() แต่เมื่อฉันสาย uncomment (B) , ฉันได้รับUnboundLocalError: 'c' not assignedที่เส้น(A) ค่าของaและbถูกพิมพ์อย่างถูกต้อง สิ่งนี้ทำให้ฉันงงงวยอย่างสมบูรณ์ด้วยเหตุผลสองประการ: เหตุใดจึงมีข้อผิดพลาด runtime โยนที่สาย(A)เพราะเป็นคำสั่งในภายหลังบรรทัด(B) ? ทำไมตัวแปรaและbพิมพ์ได้ตามที่คาดไว้ในขณะที่cเกิดข้อผิดพลาด คำอธิบายเดียวที่ฉันสามารถขึ้นมาเป็นที่ท้องถิ่นตัวแปรcถูกสร้างขึ้นโดยได้รับมอบหมายc+=1ซึ่งจะนำแบบอย่างมากกว่าตัวแปร "ทั่วโลก" cแม้กระทั่งก่อนที่ตัวแปรท้องถิ่นจะถูกสร้างขึ้น แน่นอนมันไม่สมเหตุสมผลที่ตัวแปรจะ "ขโมย" ขอบเขตก่อนที่มันจะมีอยู่ มีคนช่วยอธิบายพฤติกรรมนี้ได้ไหม