最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python錯(cuò)誤NameError:name?'X'?is?not?defined的解決方法

 更新時(shí)間:2023年03月31日 14:55:15   作者:跡憶客  
這篇文章主要給大家介紹了關(guān)于Python錯(cuò)誤NameError:name?‘X‘?is?not?defined的解決方法,這是最近工作中遇到的一個(gè)問(wèn)題,文中通過(guò)實(shí)例代碼將解決的方法介紹的非常詳細(xì),需要的朋友可以參考下

Python“NameError: name is not defined”發(fā)生在我們?cè)噲D訪(fǎng)問(wèn)一個(gè)未定義的變量或函數(shù)時(shí),或者在它被定義之前。

要解決該錯(cuò)誤,需要確保我們沒(méi)有拼錯(cuò)變量名并在聲明后訪(fǎng)問(wèn)它。

確保你沒(méi)有拼錯(cuò)變量或函數(shù)

下面是產(chǎn)生上述錯(cuò)誤的示例代碼。

employee = {
    'name': 'Jiyik',
    'age': 30,
}

# ?? NameError: name 'Employee' is not defined. Did you mean: 'employee'?
print(Employee) # ??? 拼寫(xiě)錯(cuò)誤的變量名

Python 錯(cuò)誤 NameError name X is not defined

問(wèn)題是我們拼錯(cuò)了變量名。 請(qǐng)注意,變量、函數(shù)和類(lèi)的名稱(chēng)區(qū)分大小寫(xiě)。

要解決這種情況下的錯(cuò)誤,我們必須正確拼寫(xiě)變量名。

employee = {
    'name': 'Jiyik',
    'age': 30,
}

print(employee)

‘X’ is not defined 錯(cuò)誤的常見(jiàn)原因

出現(xiàn) Python“NameError: name is not defined”的原因有多種:

  • 訪(fǎng)問(wèn)不存在的變量。
  • 在聲明之前訪(fǎng)問(wèn)變量、函數(shù)或類(lèi)。
  • 變量、函數(shù)或類(lèi)的名稱(chēng)拼寫(xiě)錯(cuò)誤(名稱(chēng)區(qū)分大小寫(xiě))。
  • 不要將字符串用引號(hào)引起來(lái),例如 print(hello)。
  • 不將字典的鍵用引號(hào)引起來(lái)。
  • 使用內(nèi)置模塊而不先導(dǎo)入它們。
  • 從外部訪(fǎng)問(wèn)作用域變量。 例如,在函數(shù)中聲明一個(gè)變量并試圖從外部訪(fǎng)問(wèn)它。
  • 訪(fǎng)問(wèn)不存在的變量或函數(shù)#
  • 確保我們沒(méi)有訪(fǎng)問(wèn)不存在或尚未定義的變量。

訪(fǎng)問(wèn)不存在的變量或函數(shù)

確保我們沒(méi)有訪(fǎng)問(wèn)不存在或尚未定義的變量。

# ?? NameError: name 'do_math' is not defined
print(do_math(15, 15))


def do_math(a, b):
    return a + b

代碼示例導(dǎo)致“NameError: function is not defined”錯(cuò)誤,因?yàn)槲覀冊(cè)噲D在函數(shù)聲明之前調(diào)用它。

要解決該錯(cuò)誤,請(qǐng)?jiān)诼暶髯兞亢笠苿?dòng)調(diào)用函數(shù)或訪(fǎng)問(wèn)變量的行。

# ? 1) 聲明函數(shù)或變量
def do_math(a, b):
    return a + b

# ? 2) 之后訪(fǎng)問(wèn)它
print(do_math(15, 15))  # ??? 30

請(qǐng)注意,我們還必須在類(lèi)聲明后實(shí)例化類(lèi)或調(diào)用類(lèi)方法。

使用變量時(shí)也是如此。

# ?? NameError: name 'variable' is not defined.
print(variable)

variable = 'jiyik.com'

確保將訪(fǎng)問(wèn)變量的行移到聲明它的行下方。

variable = 'jiyik.com'

print(variable)  # ??? jiyik.com

忘記用單引號(hào)或雙引號(hào)將字符串括起來(lái)

錯(cuò)誤的另一個(gè)原因是忘記將字符串用單引號(hào)或雙引號(hào)引起來(lái)。

def greet(name):
    return 'Hello ' + name

# ?? NameError: name 'Fql' is not defined. Did you mean: 'slice'?
greet(Fql) # ??? 忘記用引號(hào)括起字符串

greet 函數(shù)期望用字符串調(diào)用,但我們忘記將字符串用引號(hào)引起來(lái),因此發(fā)生了名稱(chēng)“X”未定義的錯(cuò)誤。

當(dāng)將字符串傳遞給 print() 函數(shù)而不用引號(hào)將字符串引起來(lái)時(shí),也會(huì)發(fā)生這種情況。

要解決該錯(cuò)誤,請(qǐng)將字符串括在引號(hào)中。

def greet(name):
    return 'Hello ' + name

greet('Fql')

使用內(nèi)置模塊而不導(dǎo)入它

如果我們使用內(nèi)置模塊而不導(dǎo)入它,也會(huì)導(dǎo)致“NameError: name is not defined”。

# ?? NameError: name 'math' is not defined
print(math.floor(15.5))

我們使用 math 模塊而不先導(dǎo)入它,所以 Python 不知道 math 指的是什么。

“NameError: name ‘math’ is not defined”意味著我們正在嘗試訪(fǎng)問(wèn) math 模塊上的函數(shù)或?qū)傩?,但在訪(fǎng)問(wèn)該屬性之前我們還沒(méi)有導(dǎo)入模塊。

要解決該錯(cuò)誤,請(qǐng)確保導(dǎo)入我們正在使用的所有模塊。

import math
print(math.floor(15.5))  # ??? 15

import math 行是必需的,因?yàn)樗鼘?math 模塊加載到我們的代碼中。

模塊只是函數(shù)和類(lèi)的集合。

我們必須先加載模塊,然后才能訪(fǎng)問(wèn)其成員。

忘記用引號(hào)將字典的鍵括起來(lái)

如果我們有一本字典而忘記將其鍵用引號(hào)括起來(lái),也會(huì)導(dǎo)致該錯(cuò)誤。

employee = {
    'name': 'Jiyik',
    # ?? NameError: name 'age' is not defined
    age: 30 # ??? 字典鍵未包含在引號(hào)中
}

除非字典中有數(shù)字鍵,否則請(qǐng)確保將它們用單引號(hào)或雙引號(hào)引起來(lái)。

employee = {
    'name': 'Jiyik',
    'age': 30
}

嘗試從外部訪(fǎng)問(wèn)作用域變量

如果我們嘗試從外部訪(fǎng)問(wèn)范圍變量,也會(huì)發(fā)生該錯(cuò)誤。

def get_message():
    message = 'jiyik.com' # ??? 函數(shù)中聲明的變量
    return message

get_message()

# ?? NameError: name 'message' is not defined
print(message)

message 變量是在 get_message 函數(shù)中聲明的,因此無(wú)法從外部范圍訪(fǎng)問(wèn)它。

如果必須從外部訪(fǎng)問(wèn)變量,最好的解決方法是在外部作用域中聲明該變量。

# ??? 在外部范圍內(nèi)聲明變量
message = 'hello world'

def get_message():
    return message

get_message()

print(message)  # ??? "hello world"

在這種情況下,另一種方法是從函數(shù)返回值并將其存儲(chǔ)在變量中。

def get_message():
    message = 'jiyik.com'
    return message

result = get_message()

print(result)  # ??? "hello world"

另一種選擇是將變量標(biāo)記為全局變量。

def get_message():
    # ??? 將 message 標(biāo)記為全局
    global message

    # ??? change its value
    message = 'hello world'

    return message

get_message()

print(message)  # ??? "hello world"

請(qǐng)注意 ,通常應(yīng)避免使用 global 關(guān)鍵字,因?yàn)樗鼤?huì)使我們的代碼更難閱讀和推理。

試圖訪(fǎng)問(wèn)在嵌套函數(shù)中聲明的變量

如果我們嘗試從外部函數(shù)訪(fǎng)問(wèn)在嵌套函數(shù)中聲明的變量,我們可以將該變量標(biāo)記為非局部變量。

def outer():
    def inner():
        message = 'jiyik.com'
        print(message)

    inner()

    # ?? NameError: name 'message' is not defined
    print(message)

outer()

內(nèi)部函數(shù)聲明了一個(gè)名為 message 的變量,但我們嘗試從外部函數(shù)訪(fǎng)問(wèn)該變量并得到“name message is not defined”錯(cuò)誤。

為了解決這個(gè)問(wèn)題,我們可以將消息變量標(biāo)記為非局部變量。

def outer():
    # ??? 初始化 message 變量
    message = ''

    def inner():
        # ??? 將 message 標(biāo)記為 nonlocal
        nonlocal message
        message = 'jiyik.com'
        print(message)

    inner()

    print(message)  # ??? "jiyik.com"

outer()

nonlocal 關(guān)鍵字允許我們使用封閉函數(shù)的局部變量。

請(qǐng)注意 ,我們必須在外部函數(shù)中初始化消息變量,但我們能夠在內(nèi)部函數(shù)中更改它的值。

如果我們不使用 nonlocal 語(yǔ)句,對(duì) print() 函數(shù)的調(diào)用將返回一個(gè)空字符串。

def outer():
    # ??? 初始化 message 變量
    message = ''

    def inner():
        # ??? 在內(nèi)部范圍內(nèi)聲明 message
        message = 'hello world'
        print(message)

    inner()

    print(message)  # ??? ""

outer()

在類(lèi)定義之前訪(fǎng)問(wèn)它

當(dāng)我們?cè)诙x類(lèi)之前訪(fǎng)問(wèn)類(lèi)時(shí),也會(huì)發(fā)生該錯(cuò)誤。

# ?? 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

要解決該錯(cuò)誤,請(qǐng)將實(shí)例化行移至類(lèi)聲明下方。

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

如果我們正在使用來(lái)自第三方庫(kù)的類(lèi),則必須先導(dǎo)入該類(lèi)才能使用它。

請(qǐng)注意在 try/except 塊中使用 import 語(yǔ)句

try/except 塊中使用 import 語(yǔ)句時(shí)也可能發(fā)生該錯(cuò)誤。

try:
    # ??? 此處的代碼可能會(huì)引發(fā)錯(cuò)誤

    import math
    result = math.floor(15.5)

except ImportError:
    math.floor(18.5)

print(math.floor(20.5))

該代碼示例有效,但是,如果 import 語(yǔ)句之前的某些代碼引發(fā)錯(cuò)誤,則該模塊將不會(huì)被導(dǎo)入。

這是一個(gè)問(wèn)題,因?yàn)槲覀冋?except 塊中和 try/except 語(yǔ)句之外訪(fǎng)問(wèn)模塊。

相反,將導(dǎo)入語(yǔ)句移至文件頂部。

# ? 將 import 語(yǔ)句移動(dòng)到文件頂部
import math

try:
    result = math.floor(15.5)

except ImportError:
    math.floor(18.5)

print(math.floor(20.5))

總結(jié)

要解決 Python “NameError: name is not defined”,請(qǐng)確保:

  • 我們沒(méi)有訪(fǎng)問(wèn)不存在的變量。
  • 我們不會(huì)在聲明變量、函數(shù)或類(lèi)之前訪(fǎng)問(wèn)它。
  • 我們沒(méi)有拼錯(cuò)變量、函數(shù)或類(lèi)的名稱(chēng)(名稱(chēng)區(qū)分大小寫(xiě))。
  • 我們沒(méi)有忘記用引號(hào)括起一個(gè)字符串,例如 print(hello)。
  • 我們沒(méi)有忘記用引號(hào)將字典的鍵括起來(lái)。
  • 如果不先導(dǎo)入內(nèi)置模塊,就不會(huì)使用它們。
  • 我們不是從外部訪(fǎng)問(wèn)作用域變量。 例如,在函數(shù)中聲明一個(gè)變量并試圖從外部訪(fǎng)問(wèn)它。

到此這篇關(guān)于Python錯(cuò)誤NameError:name ‘X‘ is not defined的解決方法的文章就介紹到這了,更多相關(guān)Python錯(cuò)誤NameError:name ‘X‘ is not defined內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

松原市| 日喀则市| 通山县| 隆尧县| 石泉县| 黄浦区| 武邑县| 冕宁县| 海伦市| 揭阳市| 闽侯县| 芷江| 白玉县| 临江市| 许昌县| 临武县| 河北省| 大兴区| 浮梁县| 青铜峡市| 兰西县| 桃源县| 合江县| 米易县| 马龙县| 肃南| 加查县| 靖州| 临朐县| 灌南县| 陆良县| 遂川县| 南安市| 永丰县| 尉犁县| 随州市| 江北区| 珲春市| 宁河县| 通许县| 台北县|