Аннотирование осевых точек x с использованием pyplot [duplicate]

Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:

SqlConnection connection = null;
connection.Open();

Это вызовет ошибку, потому что, пока я объявил переменную «connection», она не указала ни на что. Когда я пытаюсь вызвать член «Open», для его устранения нет ссылки, и он будет вызывать ошибку.

Чтобы избежать этой ошибки:

  1. Всегда инициализируйте свои объекты, прежде чем пытаться что-либо с ними делать.
  2. Если вы не уверены, что объект имеет значение null, проверьте его с помощью object == null.

Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.

129
задан Mark Byers 3 August 2010 в 10:34
поделиться

6 ответов

Существует значительная проблема с некоторыми из ответов, опубликованных до сих пор: unicode() декодирует кодировку по умолчанию, которая часто является ASCII; на самом деле, unicode() пытается сделать «смысл» байтов, которые он задает, преобразуя их в символы. Таким образом, следующий код, который по сути является тем, что рекомендуется в предыдущих ответах, не работает на моей машине:

# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format(unicode(author))

дает:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    print '{0}'.format(unicode(author))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

Ошибка возникает из-за того, что author не содержит только ASCII-байты (т. е. со значениями в [0; 127]), а unicode() по умолчанию декодирует из ASCII (на многих машинах).

Надежное решение должно явно указывать кодировка, используемая в ваших полях; взяв UTF-8 в качестве примера:

u'{0} in {1}'.format(unicode(self.author, 'utf-8'), unicode(self.publication, 'utf-8'))

(или без начального u, в зависимости от того, хотите ли вы результат Unicode или байтовую строку).

При этом то можно подумать о том, что поля author и publication являются строками Unicode, а не декодировать их во время форматирования.

8
ответ дан Eric Lebigot 22 August 2018 в 08:19
поделиться

Для python2 вы также можете сделать это

'%(author)s in %(publication)s'%{'author':unicode(self.author),
                                  'publication':unicode(self.publication)}

, что удобно, если у вас есть много аргументов для замены (особенно если вы делаете интернационализацию)

Python2.6 вперед поддерживает .format()

'{author} in {publication}'.format(author=self.author,
                                   publication=self.publication)
5
ответ дан John La Rooy 22 August 2018 в 08:19
поделиться

Вы также можете использовать его чистым и простым (но не так, потому что вы должны использовать format, как сказал Марк Байерс), выполнив:

print 'This is my %s formatted with %d arguments' % ('string', 2)
4
ответ дан Lordn__n 22 August 2018 в 08:19
поделиться

Если вы используете несколько аргументов, это должно быть в кортеже (обратите внимание на дополнительные скобки):

'%s in %s' % (unicode(self.author),  unicode(self.publication))

Как указывает EOL, функция unicode() обычно принимает ascii-кодирование по умолчанию, поэтому, если у вас есть символы, отличные от ASCII, безопаснее явно передавать кодировку:

'%s in %s' % (unicode(self.author,'utf-8'),  unicode(self.publication('utf-8')))

. А с Python 3.0 предпочтительнее использовать str.format() вместо:

'{0} in {1}'.format(unicode(self.author,'utf-8'),unicode(self.publication,'utf-8'))
102
ответ дан Mark Cidade 22 August 2018 в 08:19
поделиться
  • 1
    Также, начиная с Python 2.7, он может отбросить номер индекса, т. Е. Использовать строку формата '{} in {}'. – Cristian Ciupitu 31 May 2015 в 08:11

В объекте кортежа / сопоставления для множественного аргумента format

Ниже приведена отрывок из документации:

Учитывая спецификации format % values, % в format заменены на ноль или более элементов из values. Эффект похож на использование sprintf() в языке C.

Если для format требуется один аргумент, значения могут быть одиночными объектами без кортежей. В противном случае значения должны быть кортежем с точно количеством элементов, заданных строкой format , или единственным объектом сопоставления (например, словарем).

Ссылки


На str.format вместо %

Более новой альтернативой оператору % является использование str.format. Вот выдержка из документации:

str.format(*args, **kwargs)

Выполнить операцию форматирования строк. Строка, на которой вызывается этот метод, может содержать литеральный текст или поля замещения, разделенные фигурными скобками {}. Каждое поле замены содержит либо числовой индекс позиционного аргумента, либо имя аргумента ключевого слова. Возвращает копию строки, где каждое замещающее поле заменяется строковым значением соответствующего аргумента.

Этот метод является новым стандартом в Python 3.0 и должен быть предпочтительнее форматирования % .

Ссылки


Примеры

Вот некоторые примеры использования:

>>> '%s for %s' % ("tit", "tat")
tit for tat

>>> '{} and {}'.format("chicken", "waffles")
chicken and waffles

>>> '%(last)s, %(first)s %(last)s' % {'first': "James", 'last': "Bond"}
Bond, James Bond

>>> '{last}, {first} {last}'.format(first="James", last="Bond")
Bond, James Bond

См. также

45
ответ дан polygenelubricants 22 August 2018 в 08:19
поделиться
  • 1
    У меня нет возможности проверить это (я не очень хорошо знаю Python), но примеры, похоже, предполагают, что что-то вроде '{self.author} in {self.publication}'.format(self=self) должно «работать». Я просто не уверен в целом unicode. – polygenelubricants 3 August 2010 в 11:08
  • 2
    Да, вы действительно можете получить доступ к атрибутам (а также индексам). См. docs.python.org/library/string.html#formatstrings Итак, в вашем примере вы могли бы использовать {first[0]} для получения начального J. – Duncan 3 August 2010 в 13:43

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

'%s in %s' % (unicode(self.author),  unicode(self.publication))

Здесь для первого %s будет помещен unicode(self.author). И для второго %s будет использоваться unicode(self.publication).

Примечание. Вы должны string formatting использовать % Notation. Подробнее здесь

6
ответ дан user1767754 22 August 2018 в 08:19
поделиться
  • 1
    Я не могу поверить, что люди все же предлагают %s, а не format – user1767754 16 January 2018 в 01:09
Другие вопросы по тегам:

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