NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Боюсь, я не могу сказать вам, что происходит не так, потому что здесь отлично работает. Следующий код запускается без ошибок и показывает график с правильной меткой.
from matplotlib import pyplot, pylab
a = [1, 2, 3, 4, 5]
b = [2, 3, 2, 3, 2]
pyplot.plot(a, b)
pylab.xlabel("Time")
pylab.ylabel("Speed")
pyplot.show()
Если это не работает для вас, возможно, вы можете попробовать использовать объекты с цифрами и осями, например
from matplotlib.pyplot import subplots, show
a = [1, 2, 3, 4, 5]
b = [2, 3, 2, 3, 2]
fig, ax = subplots()
ax.plot(a, b)
ax.set_xlabel("Time")
ax.set_ylabel("Speed")
show()
Не решает основной проблемы (что сложно, так как я не могу воспроизвести ее), но, возможно, она достигнет вашей цели по крайней мере.
Я только что это случилось со мной. Кажется, что я сделал присваивать строку для xlab и ylab вроде:
plt.xlab = 'string'
plt.ylab = 'string'
Это сломало xlab и ylab, так что вы больше не можете их называть, так как они теперь фактически строки, а не функции.
Точно так же я использовал Jupyter, и мне пришлось убить Jupyter и повторно запустить его с нуля, чтобы исправить эту проблему.
Как ни странно, re -Используя библиотеки в то время, когда ядро оставалось в рабочем состоянии, работало NOT .
Я сохранил контрольную точку и остановил ноутбук ipython. Затем я перезапустил его, что решило проблему.
У меня была такая же проблема при работе в ноутбуке iPython.
Я думаю, что он может быть воссоздан следующим образом:
import matplotlib.pyplot as plt
plt.ylabel = 'somestring' # oh wait this isn't the right syntax.
...
plt.ylabel('somestring') # now this breaks because the function has been turned into a string
Повторное запуск ядра или повторного запуска, Импорт библиотек восстанавливает функцию plt.ylabel.
Я столкнулся с такой же проблемой в ноутбуке jupyter, поэтому, если вы слишком сталкиваетесь с тем, что просто перезапустите ядро, и это исправит, в вашем коде не будет синтаксической ошибки.
, если вы на выигрыше, вероятно, вы не установили правильную версию matplotlib
, вам нужно быть осторожным, какую версию python у вас есть и какую версию matplotlib вы должны иметь на своем компьютере
скачать: https://pypi.python.org/pypi/matplotlib/ для пользователей Windows: python -m pip install --user matplotlib-2.1.0-cp36-cp36m -win_amd64.whl
в имени файла вы будете использовать cp36 == python 3.6, cp27 == python 2.7, всегда сначала проверяйте, какая версия python у вас на компьютере