python unboundlocalerror: local variable '***' referenced before assignment
大意就是在變數定義前就引用了變數。
錯誤**如下:
def f():
print(n)
n = 10
f()
這裡還是很清楚,很明白。
然而下面的**就令人有些頭疼:
n = 100
def f():
print(n)
n = 10
f()
雖然定義了變數n,然後在函式內部修改,但是還是報相同的錯誤。原因在於在函式內部對變數n進行修改後,變數n被python直譯器理解為區域性變數,就變成和上面**一樣的情況了。
def f():
print(n)
f()
此時由於沒有定義變數n,所以報nameerror: name 『n』 is not defined
注意:一般情況下,在訪問變數時,會先查詢本地變數,然後是包裹此函式的外部函式內的變數,之後是全域性變數,最後是內建作用域的變數,即:l->e->g->b(e不一定存在)。在預設情況下,變數名賦值會在當前作用域建立變數和修改變數。
作用域 英文解釋 英文簡寫
區域性作用域(函式內) local(function) l
外部巢狀函式作用域 enclosing function locals e
函式定義所在模組作用域 global(module) g
python內建模組的作用域 bui b
示例如下:
v = 100 # 全域性作用域
def fun1():
v = 200 # 外部巢狀函式作用域
print('fun1.v=', v)
print(locals())
def fun2():
v = 300 # 區域性作用域
print('fun2.v=', v)
print(max) # max函式都沒有建立,在內建函式作用域中,唯讀,不能改變 # 可以在其餘三個作用域重新建立。
print(locals())
fun2()
fun1()
print("全域性變數.v=", v)
print(max) # max變數定義在內建模組的作用域,是解釋執行器提前定義好的
print(locals())
未定義的引用錯誤
在編譯工程時出現 librestapi.a rest harbor.o 在函式 rest harbor get sysinfo 中 rest harbor.c 145 對 harbor get sysinfo 未定義的引用 collect2 error ld returned 1 exit stat...
發布後500訪問錯誤 dll引用錯誤
system.net.http相關dll 測試站點上的問題,本地沒出現這個問題 後來經提醒,試了一下將sina所需要的dll都放進去,就成功了。大概是因為引用sina的dll,其所需要的dll並沒有生成,發不上去後,bin檔案下的dll缺失 上方的解法,第一步是成功了,但是進入到第二步的時候,仍舊出...
解決myql 表和表迴圈引用錯誤
const document this.sequelize.define document const version this.sequelize.define version document.hasmany version 這將 document id 新增到版本 document.belon...