Python「NameError: name is not defined」發生在我們試圖存取一個未定義的變數或函數時,或在它被定義之前。
要解決該錯誤,需要確保我們沒有拼錯變數名稱並在宣告後存取它。
下面是產生上述錯誤的範例程式碼。
employee = { 'name': 'Jiyik', 'age': 30, } # ⛔️ NameError: name 'Employee' is not defined. Did you mean: 'employee'? print(Employee) # ????️ 拼写错误的变量名
問題是我們拼錯了變數名稱。請注意,變數、函數和類別的名稱區分大小寫。
要解決這種情況下的錯誤,我們必須正確拼寫變數名稱。
employee = { 'name': 'Jiyik', 'age': 30, } print(employee)
出現Python“NameError: name is not defined”的原因有很多:
存取不存在的變數。
在宣告之前存取變數、函數或類別。
變數、函數或類別的名稱拼字錯誤(名稱區分大小寫)。
不要將字串用引號引起來,例如 print(hello)。
不將字典的鍵用引號引起來。
使用內建模組而不先導入它們。
從外部存取作用域變數。例如,在函數中聲明一個變數並試圖從外部存取它。
存取不存在的變數或函數
##確保我們沒有存取不存在或尚未定義的變數。
確保我們沒有存取不存在或尚未定義的變數。
# ⛔️ NameError: name 'do_math' is not defined print(do_math(15, 15)) def do_math(a, b): return a + b
程式碼範例導致「NameError: function is not defined」錯誤,因為我們試圖在函數宣告之前呼叫它。
要解決該錯誤,請在宣告變數後移動呼叫函數或存取變數的行。
# ✅ 1) 声明函数或变量 def do_math(a, b): return a + b # ✅ 2) 之后访问它 print(do_math(15, 15)) # ????️ 30
請注意,我們也必須在類別宣告後實例化類別或呼叫類別方法。
使用變數時也是如此。
# ⛔️ NameError: name 'variable' is not defined. print(variable) variable = 'jiyik.com'
確保將存取變數的行移到宣告它的行下方。
variable = 'jiyik.com' print(variable) # ????️ jiyik.com
錯誤的另一個原因是忘記將字串用單引號或雙引號引起來。
def greet(name): return 'Hello ' + name # ⛔️ NameError: name 'Fql' is not defined. Did you mean: 'slice'? greet(Fql) # ????️ 忘记用引号括起字符串
greet 函數期望用字串調用,但我們忘記將字串用引號引起來,因此發生了名稱「X」未定義的錯誤。
當字串傳遞給
print()
函數而不用引號將字串引起來時,也會發生這種情況。
要解決該錯誤,請將字串括在引號中。
def greet(name): return 'Hello ' + name greet('Fql')
如果我們使用內建模組而不導入它,也會導致「NameError: name is not defined」。
# ⛔️ NameError: name 'math' is not defined print(math.floor(15.5))
我們使用 math 模組而不先導入它,所以 Python 不知道 math 指的是什麼。
「NameError: name ‘math’ is not defined」表示我們正在嘗試存取 math 模組上的函數或屬性,但在存取該屬性之前我們還沒有導入模組。
要解決該錯誤,請確保導入我們正在使用的所有模組。
import math print(math.floor(15.5)) # ????️ 15
import math
行是必要的,因為它將 math 模組載入到我們的程式碼中。
模組只是函數和類別的集合。
我們必須先載入模組,然後才能存取其成員。
如果我們有一本字典而忘記將其鍵用引號括起來,也會導致該錯誤。
employee = { 'name': 'Jiyik', # ⛔️ NameError: name 'age' is not defined age: 30 # ????️ 字典键未包含在引号中 }
除非字典中有數字鍵,否則請確保將它們用單引號或雙引號引起來。
employee = { 'name': 'Jiyik', 'age': 30 }
如果我們嘗試從外部存取範圍變量,也會發生該錯誤。
def get_message(): message = 'jiyik.com' # ????️ 函数中声明的变量 return message get_message() # ⛔️ NameError: name 'message' is not defined print(message)
message 變數是在 get_message
函數中聲明的,因此無法從外部範圍存取它。
如果必須從外部存取變量,最好的解決方法是在外部作用域中聲明該變數。
# ????️ 在外部范围内声明变量 message = 'hello world' def get_message(): return message get_message() print(message) # ????️ "hello world"
在這種情況下,另一種方法是從函數傳回值並將其儲存在變數中。
def get_message(): message = 'jiyik.com' return message result = get_message() print(result) # ????️ "hello world"
另一種選擇是將變數標記為全域變數。
def get_message(): # ????️ 将 message 标记为全局 global message # ????️ change its value message = 'hello world' return message get_message() print(message) # ????️ "hello world"
請注意
,通常應避免使用global
關鍵字,因為它會使我們的程式碼更難閱讀和推理。
如果我們嘗試從外部函數存取在巢狀函數中宣告的變數,我們可以將該變數標記為非局部變數。
def outer(): def inner(): message = 'jiyik.com' print(message) inner() # ⛔️ NameError: name 'message' is not defined print(message) outer()
內部函數宣告了一個名為 message 的變量,但我們嘗試從外部函數存取該變數並得到「name message is not defined」錯誤。
為了解決這個問題,我們可以將訊息變數標記為非局部變數。
def outer(): # ????️ 初始化 message 变量 message = '' def inner(): # ????️ 将 message 标记为 nonlocal nonlocal message message = 'jiyik.com' print(message) inner() print(message) # ????️ "jiyik.com" outer()
nonlocal
關鍵字允許我們使用封閉函數的局部變數。
请注意
,我们必须在外部函数中初始化消息变量,但我们能够在内部函数中更改它的值。
如果我们不使用 nonlocal
语句,对 print()
函数的调用将返回一个空字符串。
def outer(): # ????️ 初始化 message 变量 message = '' def inner(): # ????️ 在内部范围内声明 message message = 'hello world' print(message) inner() print(message) # ????️ "" outer()
当我们在定义类之前访问类时,也会发生该错误。
# ⛔️ NameError: name 'Employee' is not defined emp1 = Employee('jiyik', 100) class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def get_name(self): return self.name
要解决该错误,请将实例化行移至类声明下方。
class Employee(): def __init__(self, name, salary): self.name = name self.salary = salary def get_name(self): return self.name emp1 = Employee('jiyik', 100) print(emp1.name) # ????️ jiyik
如果我们正在使用来自第三方库的类,则必须先导入该类才能使用它。
在 try/except
块中使用 import
语句时也可能发生该错误。
try: # ????️ 此处的代码可能会引发错误 import math result = math.floor(15.5) except ImportError: math.floor(18.5) print(math.floor(20.5))
该代码示例有效,但是,如果 import
语句之前的某些代码引发错误,则该模块将不会被导入。
这是一个问题,因为我们正在 except 块中和 try/except
语句之外访问模块。
相反,将导入语句移至文件顶部。
# ✅ 将 import 语句移动到文件顶部 import math try: result = math.floor(15.5) except ImportError: math.floor(18.5) print(math.floor(20.5))
以上是Python錯誤NameError:name 'X' is not defined如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!