matplotlib ylabel TypeError: объект 'str' не может быть вызван [дубликат]

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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

31
задан neptune36 9 June 2014 в 13:10
поделиться

7 ответов

Боюсь, я не могу сказать вам, что происходит не так, потому что здесь отлично работает. Следующий код запускается без ошибок и показывает график с правильной меткой.

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()

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

6
ответ дан Mark 18 August 2018 в 20:46
поделиться
  • 1
    Спасибо, что работает. Что касается моего кода, после всего этого перезапуск интерпретатора сделал трюк. Извини за это! – neptune36 9 June 2014 в 13:56
  • 2
    +1 при использовании интерфейса OO. – tacaswell 9 June 2014 в 14:42

Я только что это случилось со мной. Кажется, что я сделал присваивать строку для xlab и ylab вроде:

plt.xlab = 'string'
plt.ylab = 'string'

Это сломало xlab и ylab, так что вы больше не можете их называть, так как они теперь фактически строки, а не функции.

Точно так же я использовал Jupyter, и мне пришлось убить Jupyter и повторно запустить его с нуля, чтобы исправить эту проблему.

Как ни странно, re -Используя библиотеки в то время, когда ядро ​​оставалось в рабочем состоянии, работало NOT .

3
ответ дан Jordan 18 August 2018 в 20:46
поделиться

Я сохранил контрольную точку и остановил ноутбук ipython. Затем я перезапустил его, что решило проблему.

2
ответ дан Mreno sert 18 August 2018 в 20:46
поделиться

У меня была такая же проблема при работе в ноутбуке 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.

63
ответ дан Ricky McMaster 18 August 2018 в 20:46
поделиться
  • 1
    Я также думаю, что это тоже проблема! Я делаю эту ошибку время от времени. Благодаря! – Jimi Oke 12 January 2016 в 21:18
  • 2
    Подтверждено, что мне удалось это сделать и в iPython! – Peter C 3 April 2016 в 14:22
  • 3
    Да, я думаю, это тоже была моя ошибка. Спасибо, что заметили! – yuqli 29 January 2018 в 23:24
  • 4
    Я нахожу тот факт, что так много людей имели именно эту ошибку довольно забавно :)) – Shlomo Koppel 1 March 2018 в 10:47
  • 5
    Очень показательно. Он отмечает важность того, чтобы не впадать в эти ошибки. спасибо – CristhianParedes 14 March 2018 в 01:32

Я столкнулся с такой же проблемой в ноутбуке jupyter, поэтому, если вы слишком сталкиваетесь с тем, что просто перезапустите ядро, и это исправит, в вашем коде не будет синтаксической ошибки.

0
ответ дан sayantan ghosh 18 August 2018 в 20:46
поделиться

, если вы на выигрыше, вероятно, вы не установили правильную версию 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 у вас на компьютере

-2
ответ дан Slavo7 18 August 2018 в 20:46
поделиться
  • 1
    Это совершенно не связано с вопросом. – ImportanceOfBeingErnest 13 June 2018 в 19:53
0
ответ дан Venkat Rajanala 30 October 2018 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: