Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Поскольку PEP-8 говорит нам использовать пробелы.
Я использую два добавления отступа пространства и редактора (kwrite), который вставляет пробелы вместо вкладок, когда я поразил клавишу Tab.
Я недавно столкнулся со статьей, названной Python: Мифы о Добавлении отступа , который обсуждает это и связанные вопросы. Статья имеет серьезные основания для рекомендации использования пробелов при записи кода Python, но существует, конечно, место для разногласия.
я полагаю, что это верно, что большинство Python программистов использует пробелы только.
Большая часть "pythonic" пути состоит в том, чтобы использовать 4 пробелов на уровень отступа. Интерпретатор Python однако распознает пробелы или вкладки. Единственный глюк, Вы никогда не должны смешивать пробелы и вкладки , выбрать один или другой. Однако спецификация рекомендует пробелы, большинство разработчиков использует пробелы, поэтому если у Вас нет действительно серьезного основания не к, я сказал бы, идут с пробелами.
Используйте редактора, который позволяет Вам вставлять пробелы до позиции табуляции, когда Вы нажимаете клавишу TAB, вместо того, чтобы вставить \t символ. И затем забудьте об этом.
Единственное неудобство, которое я испытываю с использованием пробелов вместо вкладок, - то, что Вы не можете легко удалить уровень отступа; необходимо удалить четыре пробелов вместо всего одной вкладки.
Ошибка от редактора к редактору происходит, когда Вы имеете смешанное добавление отступа в файле . Это возникает следующим образом: блок кода располагается с отступом с 4 пробелами, и затем одним уровнем отступа "в", это располагается с отступом с вкладками. Теперь у язычника, который сделал это (смешивание вкладок и пробелов) был он так, его вкладки являются также 4 пробелами, таким образом, он не видит проблем, и Python не видит проблем.
Теперь наша жертва приезжает позже, и ему установили его вкладки на 8 пробелов. Теперь наши жертвы думают, что код смотрит, все били, и фиксирует его удаление одного уровня добавления отступа , который теперь делает код , взгляд как он является все еще 2 уровнями добавления отступа, но действительно один уровень . В этой точке весь ад вырывается на свободу.
урок здесь - то, что Вы никогда не должны, вкладки соединения и пробелы. Если Вы придерживаетесь этого, то легко повторно расположить Ваш код с отступом в пробелы или вкладки, независимо от которых Вы лично используете. Лучший способ удостовериться Вы не смешиваете вкладки, и пробелы должен всегда работать python
с -tt
, который произведет ошибку, когда вкладки и пробелы будут смешаны.
Что касается вкладок и пробелов, я лично использую вкладки так отдельное добавление отступа от появления - намного легче изменить появление кода, когда это располагается с отступом с вкладками, чем это с пробелами. Я знаю, что это работает вопреки тому, что делают 99% Python программистов, но это - мой персональный предпочтение, и легко в любом случае преобразовать файл с вкладками в расположенный с интервалами. Реверс не всегда верен, так как можно случайно бить 4 пробелов в строках, и т.д.
Вы вкладки соединения CAN и пробелы... НО вкладка считается тем же добавлением отступа как 8 пробелов, поэтому если Ваш редактор не настраивается, чтобы полагать, что вкладка 8 пробелов, Вы напрашиваетесь на неприятности при смешивании их.
Tired of chasing after indentation typos ( 8 spaces ? no, 7 oops 9 ... ) I switched my sources to 'tabs only'.
1 tab == 1 indent level, full stop
The point is: if you want to display the indentation as 4, 8 or pi / 12 character width, just change the settings in your text editor, don't mess with the code.
(Personally, I use 4 char width tab... but some would prefer 3 or 8 space, or even use variable width fonts.)
Моя главная причина использования табуляции вместо пробелов - клавиша Backspace. Если я нахожусь на строке и хочу удалить отступ только на этой строке, мне нужно нажать Backspace 4 раза, если бы это были пробелы; тогда как при использовании табуляции мне нужно нажать ее только один раз.
Я буду продолжать использовать табуляцию, потому что, как было сказано ранее, проще преобразовать табуляцию в пробел, но не наоборот.
Я думаю, что хочу написать простую программу, которая преобразует код с пробелами в код с табуляцией, потому что я чертовски ненавижу пробелы. Они доводят меня до бешенства!
О! И использование клавиш со стрелками для перемещения влево и вправо - это всегда боль в заднице, когда там пробелы.
UPDATE: Sublime Text 3 теперь удаляет всю мягкую вкладку клавишей backspace; хотя навигация с помощью клавиш со стрелками по-прежнему утомительна.
UPDATE: Теперь я использую vscode, а также написал для него расширение TabSanity, чтобы решить проблемы с backspace, delete и навигацией по клавишам со стрелками.
ИСПОЛЬЗУЙТЕ РЕДАКТОР, КОТОРЫЙ ОТОБРАЖАЕТ СИМВОЛЫ ВКЛАДКИ (если на то пошло, все пробелы). Вы программируете, а не пишете статью.
Я использую вкладки. Во вкладках нет места для ошибки с одним пробелом (если вы их видите). Проблема в том, что люди используют разные редакторы, и единственная общая вещь в мире: tab == indent, как указано выше. Какой-то парень входит с клавишей табуляции, установленной на неправильное количество пробелов, или делает это вручную и создает беспорядок. Вкладки и использовать настоящий редактор. (Это не просто противоречит PEP, это касается C / C ++ и других языков, не зависящих от пробелов).
/ выходит из мыльницы
Люди будут использовать различных редакторов на том же коде. Эти редакторы представят вкладку на экране по-другому. Если Вы будете работать над редактором, который представляет вкладку как 4 пробелов, если Вы расположите с отступом первую строку "\t "
и второе "\t\t"
, они будут похожи, они находятся на том же уровне отступа: 8 пробелов.
интерпретатор Python не знает Вашего редактора, и он должен интерпретировать вкладку как некоторый объем добавления отступа. На самом деле это интерпретирует вкладку как 8 пробелов, таким образом, это будет видеть различные уровни отступа, чем, что Вы предназначили: 12 пробелов для первой строки, 16 пробелов для второго. Вы поджарены.