通過這個解釋,我們將瞭解當Python程式顯示類似NameError: name '' is not defined的錯誤時,即使該函數存在於腳本中,也會出現這種情況。 我們還學習了當我們使用拼寫錯誤的變數或沒有導入的內置函數時會發生什麼,以及如何在Python中避免這些錯誤。 避免在Python聲 ...
通過這個解釋,我們將瞭解當Python程式顯示類似NameError: name '
我們還學習了當我們使用拼寫錯誤的變數或沒有導入的內置函數時會發生什麼,以及如何在Python中避免這些錯誤。
避免在Python聲明之前調用函數
在Python中有很多原因會導致NameError: function is not defined,我們將討論導致此錯誤的最常見原因。當我們在程式中定義函數之前調用它時,Python解釋器將無法找到函數定義。
在這種情況下,函數將不可見,Python解釋器尚未遇到函數定義。因此,Python解釋器會感到困惑並拋出錯誤,這意味著該函數尚未根據解釋器定義。
讓我們看一個簡單的例子在這個程式中,我們在定義函數之前編寫了一個調用語句。由於解釋器逐行執行Python程式,當它開始執行第一行時,它會遇到一個特定的函數調用,但它不知道Hello()是什麼。
Hello()
def Hello():
print('I will never be called')
當我們運行這個Python腳本時,它會對它是否是一個函數感到困惑,Python解釋器會停止並拋出一個錯誤。這是因為這個函數的定義在函數調用之後才出現;這就是為什麼我們永遠不能在定義一個函數之前調用它。
NameError: name 'Hello' is not defined
我們需要在調用函數之前定義它來修複這個錯誤。
避免在Python中使用拼寫錯誤的變數或函數名
出現此錯誤的另一個原因是用戶在定義函數的正確拼寫時出錯;這就是為什麼用戶得到這種類型的錯誤。Python是大小寫敏感的,所以小寫和大寫將是不同的函數。
我們檢查一個例子來演示解釋器在得到拼寫錯誤的變數時如何操作。
Orange='orange'
for i in orange:
print(i)
輸出:
NameError: name 'orange' is not defined
當我們運行Python腳本時,我們得到一個錯誤,說'orange' is not defined,但這次我們沒有犯拼寫錯誤,那麼為什麼即使我們定義了這個變數,我們還是得到這個錯誤呢?這是因為我們定義了一個以大寫字母開頭的變數,並試圖用小寫字母訪問它。
相同的場景將應用於函數。如果我們用Orange覆蓋orange變數,它就可以工作。
orange='orange'
for i in orange:
print(i)
輸出:
o
r
a
n
g
e
避免在Python中使用沒有導入的內置模塊
比如說,當你在寫一個Python程式時,如果你想使用任何內置的函數,比如print(),input()等,你可以在代碼中使用它。當你需要使用一個不是內置在Python中的函數,而是存在於某些模塊中時,會發生什麼?
要使用屬於某些模塊的函數,必須首先將該模塊導入Python程式。一些初學者在嘗試使用模塊中的函數而不是導入該特定模塊時會失敗;看一個例子。
在這個程式中,用戶試圖生成隨機值,但是當用戶運行這個代碼時,用戶得到了我們討論過的同樣的錯誤。原因是用戶失敗了,它試圖訪問random()函數而不導入其模塊random。
Randome_Values=random.random()
print(Randome_Values)
輸出:
NameError: name 'random' is not defined
當用戶在Python腳本中導入random模塊時,它會工作。
import random
Randome_Values=random.random()
print(Randome_Values)
輸出:
0.07463088966802744
有時候,用戶自己編寫Python模塊,但遇到了同樣的問題,並得到相同的錯誤。
這是因為用戶在導入類後試圖從另一個文件調用函數,但可能用戶沒有保存定義函數的文件,這就是用戶出現此錯誤的原因。因此,請確保在調用此函數之前保存它。
修複Python中的變數超出範圍問題
大多數初學者失敗的另一個原因是,當他們試圖訪問範圍外的變數時,會得到同樣的錯誤。讓我們看一個例子,我們將得到更好的理解。
def take_order():
orders=input("Enter your orders and separate it using comma :").split(',')
return orders
def Delete_Orders():
deleted_orders=input("Enter your order name which you want to cancel :")
orders.remove(deleted_orders)
return orders
print(take_order())
print(Delete_Orders())
當我們運行這個Python腳本時,take_order()函數將正常工作,但是當我們調用Delete_Orders()函數從orders列表中刪除訂單時,錯誤發生了。
NameError: name 'orders' is not defined
這是因為orders變數是在take_order()函數中定義的,我們試圖從Delete_Orders()函數訪問它。這就是為什麼當執行控制到達我們從orders列表中刪除項的位置時;它拋出一個錯誤,因為我們正在訪問它的範圍之外。
為瞭解決這個問題,我們必須聲明一個存儲空字元串的變數,變數名為orders。之後,我們需要使用global關鍵字,我們稱之為orders變數,以使其可重用。
orders=''
def take_order():
global orders
orders=input("Enter your orders and separate it using comma :").split(',')
return orders
def Delete_Orders():
deleted_orders=input("Enter your order name which you want to cancel :")
orders.remove(deleted_orders)
return orders
#Python小白學習交流群:711312441
print(take_order())
print(Delete_Orders())
輸出:
Enter your orders and separate it using comma :pizza,drink,water
['pizza', 'drink', 'water']
Enter your order name which you want to cancel :water
['pizza', 'drink']