Почему выводит none python
Перейти к содержимому

Почему выводит none python

  • автор:

Почему выводит none python

Почему тут выводит «None»? Это в моём коде ошибка или в консоли?

Код вот такой:

>>> import random >>> print(buttons) None >>> numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] >>> buttons = random.shuffle(numbers) >>> print(buttons) None >>>

Почему тут выводит «None»? Это в моём коде ошибка или в консоли?
Спасибо!

Последний раз редактировалось FsGaCh; 04.04.2020 в 12:45 .

None (null), или немного о типе NoneType

Python 3 логотип

Ключевое слово null обычно используется во многих языках программирования, таких как Java, C++, C# и JavaScript. Это значение, которое присваивается переменной.

Концепция ключевого слова null в том, что она дает переменной нейтральное или «нулевое» поведение.

А что же в Python?

Эквивалент null в Python: None

Он был разработан таким образом, по двум причинам:

Многие утверждают, что слово null несколько эзотерично. Это не наиболее дружелюбное слово для новичков. Кроме того, None относится именно к требуемой функциональности — это ничего, и не имеет поведения.

Присвоить переменной значение None очень просто:

Существует много случаев, когда следует использовать None.

Часто вы хотите выполнить действие, которое может работать либо завершиться неудачно. Используя None, вы можете проверить успех действия. Вот пример:

Python является объектно-ориентированным, и поэтому None - тоже объект, и имеет свой тип.

Проверка на None

Есть (формально) два способа проверить, на равенство None.

Один из способов — с помощью ключевого слова is.

Второй — с помощью == (но никогда не пользуйтесь вторым способом, и я попробую объяснить, почему).

Посмотрим на примеры:

Данный код выведет:
Отлично, так они делают одно и то же! Однако, не совсем. Для встроенных типов - да. Но с пользовательскими классами вы должны быть осторожны. Python предоставляет возможность переопределения операторов сравнения в пользовательских классах. Таким образом, вы можете сравнить классы, например, MyObject == MyOtherObject.
И получаем немного неожиданный результат:
Интересно, не правда ли? Вот поэтому нужно проверять на None с помощью ключевого слова is.

А ещё (для некоторых классов) вызов метода __eq__ может занимать много времени, и is будет просто-напросто быстрее.

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Почему функция выводит none в Python?

Достаточно часто возникают вопросы: "почему моя функция ничего не возвращает?!", "почему из функции возвращается None?", "не могу понять откуда появляется None. ".

Для начала необходимо понимать и помнить, что любая функция в Python всегда что-то возвращает и если не используется оператор return для возврата значения (такие случаи бывают, но об этом позднее), то функция возвращает объект None . В случае если return используется, но после него ничего не указывается явно, то по умолчанию считается, что там стоит объект None .

# Не используем оператор return, поэтому результат не возвращается. def func(x): x * x print(func(10)) #=> None # Используем оператор return, но не задаем явное значение/используем некорректно def func(x): x * x return print(func(10)) #=> None # Корректно возвращаем результат с использованием оператора return def func(x): return x * x print(func(10)) #=> 100 

Порой бывает, что по ошибке указывается возврат вместе с функцией print() . Для информации функция print() в Python выводит переданные аргументы на стандартное устройство вывода (экран), но при этом не возвращает значений, т.е. можно считать, что возвращает None .

def func(x): return print(x * x) a = 5 b = func(a) # Присваиваем результат функции переменной b # Результат работы функции выводится на экран, благодаря print() в теле функции. #=> 25 # Но при этом данный результат не присваивается переменной b. print(b) #=> None 

Если дальше по коду проводятся манипуляции с переменной b, например сложение, то возникнет ошибка TypeError :

c = b + 1 # Пытаемся сложить None и 1 print(c) # => TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' 

Возможен вариант, когда функция и не должна ничего возвращать, она производит какие-либо действия с объектами в глобальной зоне видимости и на этом ее функционал заканчивается. В таком случае return может и не использоваться, но необходимо помнить, что в этом случае функция возвращает None .

# Бесполезная функция необходимая только в качестве примера. def extend_list(list1, list2): list1.extend(list2) list1 = [1, 2] list2 = [3, 4] print(extend_list(list1, list2)) # => None # При этом поставленную задачу функция выполнила - изменила list1 print(list1) # => [1, 2, 3, 4] 

В примере выше использовался метод работы со списками extend() и необходимо понимать, что метод изменяет объект, к которому применен, а не возвращает результат изменения объекта.

list3 = extend_list(list1, list2) print(list3) # => None 

Почему мой парсер возвращает None?

Author24 — интернет-сервис помощи студентам

Не работает конкретно этот кусок. В теории он должен доставать мне содержимое тега

с классом styles_paragraph__wEGPz
Но он этого не далает. При чем перемнная url корректна, я проверял, ссылка на страницу, которую парсит код абсолютно корректна, ведет именно туда, откуда я и пытаюсь взять тег

. html:

Здесь вы можете заказать любую студенческую или школьную работу.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Почему мой парсер не работает на Linix Ubuntu 3.x?
У меня есть парсер. На windows 11 он работает абсолютно корректно, возвращает именно то, что нужно.

Почему мой парсер работает на Windows но не работает на Linux?
У меня есть парсер. На windows 11 он работает абсолютно корректно, возвращает именно то, что нужно.

Мой первый парсер
Начал делать парсер на php, сделал то, что он парсит, что надо, но появилась сложность. Не могли бы.

парсер который возвращает json ВАЖНО!
Доброго времени суток. Скрипт <? $request = "GET.

Автоматизируй это!

Эксперт Python

7097 / 4601 / 1213
Регистрация: 30.03.2015
Сообщений: 13,211
Записей в блоге: 29

ЦитатаСообщение от ctepler Посмотреть сообщение

Но он этого не далает.

значит его там нет, например генерится автоматически, что подтверждает случайный набор символов в локаторе

ЦитатаСообщение от ctepler Посмотреть сообщение

При чем перемнная url корректна
а что же ты тогда не приложил вывод своей программы, чтобы посмотреть на все принты?
Регистрация: 28.08.2022
Сообщений: 137

Она не генерируется случайно. Сколько раз обновлялс траницу, смотрел с дургих бразуеров, имя классе не меняется.
Ссылка корректна, так если перейти по ней, то тебя бросает на сайт с фильмом, название которого было введено. Но если вас так это волнует, вот код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
import requests from bs4 import BeautifulSoup as BS def GetLink(FilmName): FM = FilmName.replace(" ", "+") r = requests.get(f'https://www.kinopoisk.ru/index.php?kp_query=') html = BS(r.content, 'lxml') s = html.body.find('div',class_='info') a = s.find('a') rat = html.body.find('div', class_='rating') url = a.attrs["data-url"] res = html.find("p", class_="name") print(url) URL = "https://www.kinopoisk.ru"+url print(URL) r2 = requests.get(URL) html2 = BS(r2.content, 'lxml') s2 = html2.body.find('p',class_='styles_paragraph__wEGPz') about = s2.text print[url, rat.text, res.text, about] return[url, rat.text, res.text, about]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *