NameError — одна из самых распространенных ошибок в Python. Начинающих она может пугать, но в ней нет ничего сложного. Это ошибка говорит о том, что вы попробовали использовать переменную, которой не существует.
В этом руководстве поговорим об ошибке «NameError name is not defined». Разберем несколько примеров и разберемся, как эту ошибку решать.
NameError возникает в тех случаях, когда вы пытаетесь использовать несуществующие имя переменной или функции.
В Python код запускается сверху вниз. Это значит, что переменную нельзя объявить уже после того, как она была использована. Python просто не будет знать о ее существовании.
Самая распространенная NameError
выглядит вот так:
NameError: name 'some_name' is not defined
Разберем частые причина возникновения этой ошибки.
Причина №1: ошибка в написании имени переменной или функции
Для человека достаточно просто сделать опечатку. Также просто для него — найти ее. Но это не настолько просто для Python.
Язык способен интерпретировать только те имена, которые были введены корректно. Именно поэтому важно следить за правильностью ввода всех имен в коде.
Если ошибку не исправить, то возникнет исключение. Возьмем в качестве примера следующий код:
books = ["Near Dark", "The Order", "Where the Crawdads Sing"]
print(boooks)
Он вернет:
Traceback (most recent call last):
File "main.py", line 3, in
print(boooks)
NameError: name 'boooks' is not defined
Для решения проблемы опечатку нужно исправить. Если ввести print(books)
, то код вернет список книг.
Таким образом при возникновении ошибки с именем в первую очередь нужно проверить, что все имена переменных и функций введены верно.
Причина №2: вызов функции до объявления
Функции должны использоваться после объявления по аналогии с переменными. Это связано с тем, что Python читает код сверху вниз.
Напишем программу, которая вызывает функцию до объявления:
books = ["Near Dark", "The Order", "Where the Crawdads Sing"]
print_books(books)
def print_books(books):
for b in books:
print(b)
Код вернет:
Traceback (most recent call last):
File "main.py", line 3, in
print_books(books)
NameError: name 'print_books' is not defined
На 3 строке мы пытаемся вызвать print_books()
. Однако эта функция объявляется позже.
Чтобы исправить эту ошибку, нужно перенести функцию выше:
def print_books(books):
for b in books:
print(b)
books = ["Near Dark", "The Order", "Where the Crawdads Sing"]
print_books(books)
Причина №3: переменная не объявлена
Программы становятся больше, и порой легко забыть определить переменную. В таком случае возникнет ошибка. Причина в том, что Python не способен работать с необъявленными переменными.
Посмотрим на программу, которая выводит список книг:
Такой код вернет:
Traceback (most recent call last):
File "main.py", line 1, in
for b in books:
NameError: name 'books' is not defined
Переменная books
объявлена не была.
Для решения проблемы переменную нужно объявить в коде:
books = ["Near Dark", "The Order", "Where the Crawdads Sing"]
for b in books:
print(b)
Причина №4: попытка вывести одно слово
Чтобы вывести одно слово, нужно заключить его в двойные скобки. Таким образом мы сообщаем Python, что это строка. Если этого не сделать, язык будет считать, что это часть программы. Рассмотрим такую инструкцию print()
:
Этот код пытается вывести слово «Books» в консоль. Вместо этого он вернет ошибку:
Traceback (most recent call last):
File "main.py", line 1, in
print(Books)
NameError: name 'Books' is not defined
Python воспринимает «Books» как имя переменной. Для решения проблемы нужно заключить имя в скобки:
Теперь Python знает, что нужно вывести в консоли строку, и код возвращает Books
.
Причина №5: объявление переменной вне области видимости
Есть две области видимости переменных: локальная и глобальная. Локальные переменные доступны внутри функций или классов, где они были объявлены. Глобальные переменные доступны во всей программе.
Если попытаться получить доступ к локальной переменной вне ее области видимости, то возникнет ошибка.
Следующий код пытается вывести список книг вместе с их общим количеством:
def print_books():
books = ["Near Dark", "The Order", "Where the Crawdads Sing"]
for b in books:
print(b)
print(len(books))
Код возвращает:
Traceback (most recent call last):
File "main.py", line 5, in
print(len(books))
NameError: name 'books' is not defined
Переменная books
была объявлена, но она была объявлена внутри функции print_books()
. Это значит, что получить к ней доступ нельзя в остальной части программы.
Для решения этой проблемы нужно объявить переменную в глобальной области видимости:
books = ["Near Dark", "The Order", "Where the Crawdads Sing"]
def print_books():
for b in books:
print(b)
print(len(books))
Код выводит название каждой книги из списка books
. После этого выводится общее количество книг в списке с помощью метода len()
.
I have a python script and I am receiving the following error:
Traceback (most recent call last):
File "C:UsersTimDesktoppop-erptest.py", line 1, in <module>
s = Something()
NameError: name 'Something' is not defined
Here is the code that causes the problem:
s = Something()
s.out()
class Something:
def out():
print("it works")
This is being run with Python 3.3.0 under Windows 7 x86-64.
Why can’t the Something
class be found?
wjandrea
27.3k9 gold badges59 silver badges80 bronze badges
asked Feb 10, 2013 at 23:56
1
Define the class before you use it:
class Something:
def out(self):
print("it works")
s = Something()
s.out()
You need to pass self
as the first argument to all instance methods.
answered Feb 10, 2013 at 23:59
BlenderBlender
288k53 gold badges438 silver badges495 bronze badges
5
Note that sometimes you will want to use the class type name inside its own definition, for example when using Python Typing module, e.g.
class Tree:
def __init__(self, left: Tree, right: Tree):
self.left = left
self.right = right
This will also result in
NameError: name 'Tree' is not defined
That’s because the class has not been defined yet at this point.
The workaround is using so called Forward Reference, i.e. wrapping a class name in a string, i.e.
class Tree:
def __init__(self, left: 'Tree', right: 'Tree'):
self.left = left
self.right = right
answered Dec 4, 2019 at 17:17
1
You must define the class before creating an instance of the class. Move the invocation of Something
to the end of the script.
You can try to put the cart before the horse and invoke procedures before they are defined, but it will be an ugly hack and you will have to roll your own as defined here:
Make function definition in a python file order independent
answered Feb 10, 2013 at 23:58
user574435user574435
1431 silver badge10 bronze badges
0
I got the same error below:
NameError: name ‘name’ is not defined
When I don’t define the getter method with @property
while the setter and deleter are defined as shown below:
class Person:
def __init__(self, name):
self._name = name
# @property
# def name(self):
# return self._name
@name.setter
def name(self, name):
self._name = name
@name.deleter # Here
def name(self):
del self._name
answered Nov 22, 2022 at 18:33
Первый шаг в исправлении ошибок при написании кода — понять, что именно пошло не так. И хотя некоторые сообщения об ошибках могут показаться запутанными, большинство из них помогут вам понять, что же не работает в вашей программе. В этой статье мы поговорим о том, как исправить ошибку NameError в Python. Мы рассмотрим несколько примеров кода, показывающих, как и почему возникает эта ошибка, и покажем, как ее исправить.
В Python ошибка NameError возникает, когда вы пытаетесь использовать переменную, функцию или модуль, которые не существуют, или использовать их недопустимым образом.
Некоторые из распространенных причин, вызывающих эту ошибку:
- Использование имени переменной или функции, которое еще не определено
- Неправильное написание имени переменной/функции при её вызове
- Использование модуля в Python без импорта этого модуля и т. д.
Как исправить «NameError: Name Is Not Defined» в Python
В этом разделе мы рассмотрим, как исправить ошибку NameError: Name is Not Defined
в Python.
Мы начнем с блоков кода, вызывающих ошибку, а затем посмотрим, как их исправить.
[python_ad_block]
Пример №1. Имя переменной не определено
name = "John" print(age) # NameError: name 'age' is not defined
В приведенном выше коде мы определили переменную name
, но далее попытались вывести переменную age
, которая ещё не была определена.
Мы получили сообщение об ошибке: NameError: name 'age' is not defined
. Это означает, что переменная age
не существует, мы её не задали.
Чтобы исправить это, мы можем создать переменную, и наш код будет работать нормально. К примеру, это можно сделать следующим образом:
name = "John" age = 12 print(age) # 12
Теперь значение переменной age
выводится без проблем.
Точно так же эта ошибка может возникнуть, если мы неправильно напишем имя нашей переменной. Например, сделаем так:
name = "John" print(nam) # NameError: name 'nam' is not defined
В коде выше мы написали nam
вместо name
. Чтобы исправить подобную ошибку, вам просто нужно правильно написать имя вашей переменной.
Пример №2. Имя функции не определено
def sayHello(): print("Hello World!") sayHelloo() # NameError: name 'sayHelloo' is not defined
В приведенном выше примере мы добавили лишнюю букву o
при вызове функции — sayHelloo()
вместо sayHello()
. Это просто опечатка, однако она вызовет ошибку, потому что функции с таким именем не существует.
Итак, мы получили ошибку: NameError: name 'sayHelloo' is not defined
. Подобные орфографические ошибки очень легко пропустить. Сообщение об ошибке обычно помогает исправить это.
Вот правильный способ вызова данной функции:
def sayHello(): print("Hello World!") sayHello() # Hello World!
Как мы видели в предыдущем разделе, вызов переменной, которая еще не определена, вызывает ошибку. То же самое относится и к функциям.
К примеру, это может выглядеть так:
def sayHello(): print("Hello World!") sayHello() # Hello World! addTWoNumbers() # NameError: name 'addTWoNumbers' is not defined
В приведенном выше коде мы вызвали функцию addTWoNumbers()
, которая еще не была определена в программе. Чтобы исправить это, вы можете создать функцию, если она вам нужна, или просто избавиться от нее.
Обратите внимание, что вызов функции перед ее созданием приведет к той же ошибке. То есть такой код также выдаст вам ошибку:
sayHello() def sayHello(): print("Hello World!") # NameError: name 'sayHello' is not defined
Поэтому вы всегда должны определять свои функции перед их вызовом.
Пример №3. Использование модуля без его импорта
x = 5.5 print(math.ceil(x)) # NameError: name 'math' is not defined
В приведенном выше примере мы используем метод математической библиотеки Python math.ceil()
. Однако до этого мы не импортировали модуль math
.
В результате возникает следующая ошибка: NameError: name 'math' is not defined
. Это произошло потому, что интерпретатор не распознал ключевое слово math
.
Таким образом, если мы хотим использовать функции библиотеки math
в Python, мы должны сначала импортировать соответствующий модуль.
Вот так будет выглядеть исправленный код:
import math x = 5.5 print(math.ceil(x)) # 6
В первой строке кода мы импортировали математический модуль math
. Теперь, когда вы запустите приведенный выше код, вы получите результат 6. То же самое относится и ко всем остальным библиотекам. Сначала нужно импортировать библиотеку с помощью ключевого слова import
, а потом уже можно использовать весь функционал этой библиотеки. Подробнее про импорт модулей можно узнать в статье «Как импортировать в Python?»
Заключение
В этой статье мы поговорили о том, как исправить ошибку NameError в Python.
Мы выяснили, что собой представляет NameError. Затем мы разобрали несколько примеров, которые могли вызвать ошибку NameError при работе с переменными, функциями и модулями в Python. Также мы показали, как можно исправить эти ошибки.
Надеемся, данная статья была вам полезна! Успехов в написании кода!
Перевод статьи «NameError: Name plot_cases_simple is Not Defined – How to Fix this Python Error».
Prerequisites: Python Exception Handling
There are several standard exceptions in Python and NameError is one among them. NameError is raised when the identifier being accessed is not defined in the local or global scope. General causes for NameError being raised are :
1. Misspelled built-in functions:
In the below example code, the print statement is misspelled hence NameError will be raised.
Python3
geek
=
input
()
print
(geek)
Output :
NameError: name 'print' is not defined
2. Using undefined variables:
When the below program is executed, NameError will be raised as the variable geek is never defined.
Python3
geeky
=
input
()
print
(geek)
Output :
NameError: name 'geek' is not defined
3. Defining variable after usage:
In the following example, even though the variable geek is defined in the program, it is defined after its usage. Since Python interprets the code from top to bottom, this will raise NameError
Python3
print
(geek)
geek
=
"GeeksforGeeks"
Output :
NameError: name 'geek' is not defined
4. Incorrect usage of scope:
In the below example program, the variable geek is defined within the local scope of the assign function. Hence, it cannot be accessed globally. This raises NameError.
Python3
def
assign():
geek
=
"GeeksforGeeks"
assign()
print
(geek)
Output :
NameError: name 'geek' is not defined
Handling NameError
To specifically handle NameError in Python, you need to mention it in the except statement. In the following example code, if only the NameError is raised in the try block then an error message will be printed on the console.
Python3
def
geek_message():
try
:
geek
=
"GeeksforGeeks"
return
geeksforgeeks
except
NameError:
return
"NameError occurred. Some variable isn't defined."
print
(geek_message())
Output :
NameError occurred. Some variable isn't defined.
Last Updated :
29 Jan, 2022
Like Article
Save Article
In Python, a NameError: name 'x' is not defined
error is raised when the program attempts to access or use a variable that has not been defined or assigned a value. This can happen if the variable is spelled incorrectly, or if it is accessed before it has been defined.
What Causes Undefined Variable
In Python, a variable is not created until a value is assigned to it. If an attempt is made to use a variable before it is defined, a NameError: name 'x' is not defined
error is thrown.
The error message typically includes the name of the variable that is causing the problem and the line of code where the error occurred.
Python Undefined Variable Example
Here’s an example of a Python NameError: name 'x' is not defined
thrown when using an undefined variable:
for i in range(x):
print(i)
In this example, an undefined variable x
is used in the range()
function, throwing the NameError: name 'x' is not defined
error:
Traceback (most recent call last):
File "test.py", line 1, in <module>
for i in range(x):
NameError: name 'x' is not defined
How to Solve Undefined Variable in Python
To solve the NameError: name 'x' is not defined
error in Python, you need to make sure that the variable is properly defined and assigned a value before it is used. The variable should also be referenced correctly, with the correct case and spelling.
The earlier example can be updated to define the variable before it is used:
x = 5
for i in range(x):
print(i)
Here, x
is defined by being assigned a value before it is used in the range()
function. The above code executes successfully, producing the correct output as expected:
0
1
2
3
4
Track, Analyze and Manage Errors With Rollbar
Managing errors and exceptions in your code is challenging. It can make deploying production code an unnerving experience. Being able to track, analyze, and manage errors in real-time can help you to proceed with more confidence. Rollbar automates error monitoring and triaging, making fixing Python errors easier than ever. Try it today!