摘要:后來好奇自己寫了個小程序測驗同樣報了錯誤于是猜出了,在定義這個函數的時候,我們在函數內存在給全局變量賦值的操作,它就默認把函數內的變成了本地變量。
上線前忙忙乎乎寫代碼,更新了一個同事的代碼,發現日志模塊報錯了
偽代碼如下:
from flask import current_app def add_log(data, app=None): if app: current_app = app current_app.game_logger.info(data) add_log(data)
錯誤代碼:
UnboundLocalError: local variable "current_app" referenced before assignment
因為確認在flask的app上下文中,而且沒有傳app參數進去,所以光看代碼邏輯,一直很奇怪為啥會報current_app不存在的錯誤。
后來好奇自己寫了個小程序測驗
g = 10 def test(a=None): if a: g = a print g test()
同樣報了UnboundLocalError錯誤
local variable "g" referenced before assignment
于是猜出了,在定義這個函數的時候,我們在函數內存在給全局變量 g 賦值的操作,它就默認把函數內的 g 變成了本地變量。(即便這條賦值語句并沒有被執行)
所以解決方法是,就是很簡單的加個 global 申明全局變量
修改后的代碼
g = 10 def test(a=None): global g if a: g = a print g test()
輸出正常了- -
誒,說到底就是基礎不夠扎實啊╮(╯_╰)╭
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37824.html
摘要:循環中當為時,將對象返回并作為全局變量的內容是字符串,接下來,報錯。幸運的是,代碼修改以后,執行正常,我也找到了一些文章來解釋這個問題,我的第一感覺也沒有錯,的確是變量作用域的問題,代碼在執行過程中,實際上是在訪問,而不是我們期望的。 使用python有些年頭了,自認為對Python的基本知識很了解了,今天發生的一件事讓我對Python有了更多的認識,寫成文章做個記錄。 同事讓我幫忙看...
摘要:作用域和閉包是最重要的概念之一,想要進一步學習,就必須理解作用域和閉包的工作原理。全局和局部作用域的關系在函數體內,局部變量的優先級高于同名的全局變量。作用域鏈的用途,是保證對執行環境有權訪問的所有變量和函數的有序訪問。 作用域和閉包是 JavaScript 最重要的概念之一,想要進一步學習 JavaScript,就必須理解 JavaScript 作用域和閉包的工作原理。 作用域 任何...
摘要:讓我們拆開寫小明正常結果單獨調用函數怎么返回了請注意,我們已經進入到了的一個大坑里。如果單獨調用函數,比如,此時,該函數的指向全局對象,也就是。 函數 1. arguments JavaScript還有一個免費贈送的關鍵字arguments,它只在函數內部起作用,并且永遠指向當前函數的調用者傳入的所有參數。arguments類似Array但它不是一個Array: function fo...
摘要:內存回收此時,局部變量就沒有存在的必要了,因此可以釋放它們的內存以供將來使用。局部變量會在它們離開執行環境時自動被解除引用,如下面這個例子所示手工解除的引用由于局部變量在函數執行完畢后就離開了其執行環境,因此無需我們顯式地去為它解除引用。 JavaScript 具有自動垃圾收集機制(GC:Garbage Collecation),也就是說,執行環境會負責管理代碼執行過程中使用的內存。而...
摘要:在內置命名空間不能使用全局和局部的名字。可以形象地理解成內置命名空間具有最高級別,不需要定義就可以使用,全局命名空間次之,最低級是局部命名空間。 python中的命名空間分三種: 內置的命名空間,在啟動解釋器的時候自動加載進內存的各種名字所在的空間,比如print,input等不需要定義就可以使用的名字 全局命名空間,就是從上到下所有我們定義的變量名和函數名所在的空間,是在程序從上到下...
閱讀 3076·2021-09-28 09:43
閱讀 908·2021-09-08 09:35
閱讀 1449·2019-08-30 15:56
閱讀 1192·2019-08-30 13:00
閱讀 2739·2019-08-29 18:35
閱讀 1836·2019-08-29 14:07
閱讀 3443·2019-08-29 13:13
閱讀 1337·2019-08-29 12:40