Существует ли путь вокруг кодирования в Python без вкладки, отступа и пробельных критериев?

Что такое NullPointerException?

Хорошим местом для начала является JavaDocs . Они охватывают это:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Выполнение длины null, как если бы это был массив.
  • Доступ или изменение слотов с нулевым значением, как если бы это был массив.
  • Бросать нуль, как если бы это было значение Throwable.

Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.

blockquote>

Также, если вы попытаетесь использовать нулевую ссылку с synchronized, который также выдаст это исключение, за JLS :

SynchronizedStatement:
    synchronized ( Expression ) Block
  • В противном случае, если значение выражения равно null, NullPointerException.
blockquote>

Как это исправить?

Итак, у вас есть NullPointerException. Как вы это исправите? Возьмем простой пример, который выдает NullPointerException:

public class Printer {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }
}

Идентифицирует нулевые значения

. Первый шаг - точно определить , значения которого вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:

Exception in thread "main" java.lang.NullPointerException
    at Printer.printString(Printer.java:13)
    at Printer.print(Printer.java:9)
    at Printer.main(Printer.java:19)

Здесь мы видим, что исключение выбрано в строке 13 (в методе printString). Посмотрите на строку и проверьте, какие значения равны нулю, добавив протоколирующие операторы или используя отладчик . Мы обнаруживаем, что s имеет значение null, а вызов метода length на него вызывает исключение. Мы видим, что программа перестает бросать исключение, когда s.length() удаляется из метода.

Трассировка, где эти значения взяты из

Затем проверьте, откуда это значение. Следуя вызовам метода, мы видим, что s передается с printString(name) в методе print(), а this.name - null.

Трассировка, где эти значения должны быть установлены

Где установлен this.name? В методе setName(String). С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок , что эти методы вызывают, а метод set не будет называться после методом печати. ​​

Этого достаточно, чтобы дать нам решение: добавить вызов printer.setName() перед вызовом printer.print().

Другие исправления

Переменная может иметь значение по умолчанию setName может помешать ему установить значение null):

private String name = "";

Либо метод print, либо printString может проверить значение null например:

printString((name == null) ? "" : name);

Или вы можете создать класс, чтобы name всегда имел ненулевое значение :

public class Printer {
    private final String name;

    public Printer(String name) {
        this.name = Objects.requireNonNull(name);
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer("123");
        printer.print();
    }
}

См. также:

Я все еще не могу найти проблему

Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).

9
задан Donny V. 15 September 2008 в 13:55
поделиться

29 ответов

Я в настоящее время использую NotePad ++. Существует ли, возможно, IDE, который заботился бы о вкладках и расположении с отступом?

Мне понравились pydev расширения затмения для этого.

4
ответ дан 4 December 2019 в 05:50
поделиться

Нет, нет никакого пути вокруг этого, и это дизайном:

>>> from __future__ import braces
  File "<stdin>", line 1
SyntaxError: not a chance

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

0
ответ дан 4 December 2019 в 05:50
поделиться

Странный - Никто не упомянул GEdit (Gnome) или OpenKomodo (Windows, Mac, GNU/Linux...). Они оба являются великими!

OpenKomodo особенно имеет дело с вкладками и пробелами очень хорошо. И - это свободно. Подхлестните! Когда мне нужна более легкая штука веса, я просто использую GEdit.

Загрузите OpenKomodo здесь - http://www.openkomodo.com/

0
ответ дан 4 December 2019 в 05:50
поделиться

Проверьте опции своего редактора или найдите редактора/IDE, который позволяет Вам преобразовывать ВКЛАДКИ в пробелы. Я обычно устанавливал опции своего редактора заменить Символом табуляции с 4 пробелами, и я никогда не сталкиваюсь ни с какими проблемами.

0
ответ дан 4 December 2019 в 05:50
поделиться

Реальный ответ на Ваш вопрос - то, что, если Вы собираетесь использовать язык, необходимо изучить его синтаксис. Так же, как ошибка в делающем отступ Python может генерировать ошибку компилятора, ошибка с помощью фигурных скобок на различных других языках может также генерировать ошибку компилятора.

Еще хуже это может быть тихо неправильно истолковано компилятором, чтобы сделать неправильную вещь. Это особенно опасно, когда расположение с отступом не соответствует желаемому значению. Т.е. на многих других языках:

If(first condition)
   if (second condition)
      do something interesting;
else
  do something different;

Приведет к неприятным неожиданностям.

Python вынуждает Вас написать код, который похож на то, что он делает. Это - хорошая вещь для других программистов, которые должны прочитать Ваш код, или для Вас, когда Вы пытаетесь прочитать свой собственный код после месяца или около этого.

0
ответ дан 4 December 2019 в 05:50
поделиться

В Python добавление отступа является семантическим элементом, а также обеспечением визуальной группировки для удобочитаемости.

Оба пространства и вкладка могут указать на добавление отступа. Это неудачно, потому что:

  • Интерпретация (интерпретации) вкладки варьируется среди редакторов и IDE и часто настраивается (и часто настраиваемый).

  • OTOH, некоторые редакторы не настраиваются, но применяют свои собственные правила для добавления отступа.

  • Различные последовательности пробелов и вкладок могут быть визуально неразличимыми.

  • Вырезанный и вставленный может изменить пробел.

Так, если Вы не знаете, что данная часть кода будет только изменена собой с единственным инструментом и непеременной конфигурацией, необходимо избежать вкладок для добавления отступа (настройте IDE), и удостоверьтесь, что Вас предупреждают, представлены ли они (поиск вкладок в ведущем пробеле).

И можно все еще ожидать быть укушенными время от времени, пока произвольная семантика применяется к управляющим символам.

0
ответ дан 4 December 2019 в 05:50
поделиться

Многие Python IDE и обычно способный текст/редакторы исходного кода могут обработать пробел для Вас.

Однако лучше просто "отпускать" и обладать пробельными правилами Python. С некоторой практикой они не войдут в Ваш путь вообще, и Вы найдете, что у них есть много достоинств, самое важное из которых:

  1. Из-за принудительного пробела код Python более прост понять. Вы найдете, поскольку чтение кода, написанного другими это легче к grok, чем код в, скажем, Perl или PHP.
  2. Пробел сохраняет Вас довольно много нажатий клавиш управляющих символов как {и}, которые замусорили код, написанный в подобном языкам C. Меньше {s и} s средства, среди прочего, меньше RSI и боль в запястьях. Это не вопрос для взятия слегка.
0
ответ дан 4 December 2019 в 05:50
поделиться

Я немного отказывался изучить Python из-за переключения вкладок. Однако я почти не заметил его, когда я использовал Vim.

0
ответ дан 4 December 2019 в 05:50
поделиться

Нет. Как Python проанализировал бы Ваш сценарий, если бы был способ отключить это?

0
ответ дан 4 December 2019 в 05:50
поделиться

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

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

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

1
ответ дан 4 December 2019 в 05:50
поделиться

Если Вы не хотите использовать IDE/текстовый редактор с автоматическим расположением с отступом, можно использовать pindent.py сценарий, который появляется в каталог Tools\Scripts. Это - препроцессор, который может преобразовать код как:

def foobar(a, b):
if a == b:
a = a+1
elif a < b:
b = b-1
if b > a: a = a-1
end if
else:
print 'oops!'
end if
end def foobar

в:

def foobar(a, b):
   if a == b:
       a = a+1
   elif a < b:
       b = b-1
       if b > a: a = a-1
       # end if
   else:
       print 'oops!'
   # end if
# end def foobar

Который является действительным Python.

1
ответ дан 4 December 2019 в 05:50
поделиться

Если Вы ищете рекомендацию для IDE Python после обширного исследования, я был самым довольным программным обеспечением Крыла WingIDE:

http://www.wingware.com/products

Существует ознакомительная версия, таким образом, Вам нечего терять. Это поддерживает все главные Ose и - только приблизительно 60$ для полной версии.

Мне также нравится SciTE много, который полностью свободен, свободен, свободен!

http://scintilla.sourceforge.net/SciTEDownload.html

1
ответ дан 4 December 2019 в 05:50
поделиться

Не совсем. Существует несколько способов изменить пробельные правила для данной строки кода, но Вам все еще будут нужны уровни отступа для определения объема.

Можно завершить операторы с ; и затем начните новый оператор на той же строке. (Который люди часто делают при игре в гольф.)

Если Вы хотите разбить одну строку в несколько строк, можно закончить строку с \ символ, что означает текущую строку эффективно, продолжается от первого непробельного символа следующей строки. Это визуально появляется, нарушают обычные пробельные правила, но законно.

Мой совет: не используйте вкладки, если у Вас есть беспорядок вкладки/пространства. Используйте пробелы и выберите или 2 или 3 пробелов в качестве Вашего уровня отступа.

Хороший редактор сделает его так, Вы не должны волноваться об этом. (режим Python для emacs, например, можно просто использовать клавишу Tab, и это сохранит Вас честными).

1
ответ дан 4 December 2019 в 05:50
поделиться

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

Для создания пробела абсолютно интуитивным можно использовать более сильный редактор кода или IDE (хотя Вам не нужен полноценный IDE, если все, в чем Вы нуждаетесь, является надлежащим автоматическим расположением с отступом кода).

Список редакторов может быть найден в Wiki Python, хотя тот является немного слишком исчерпывающим: - http://wiki.python.org/moin/PythonEditors

Уже существует вопрос в здесь, который пытается сократить это немного:

Возможно, необходимо добавить более конкретный вопрос на этом: "Какого редактора Python или IDE Вы предпочитаете в Windows - и почему?"

2
ответ дан 4 December 2019 в 05:50
поделиться

Я соглашаюсь с justin, и другие - выбирают хорошего редактора и используют пробелы, а не вкладки для добавления отступа, и пробельная вещь становится надуманным вопросом. Я только недавно начал использовать Python, и в то время как я думал, что пробельной проблемой будет реальное раздражение, это, оказывается, не имеет место. Для записи я использую emacs, хотя я уверен, что существуют другие редакторы там, которые делают одинаково прекрасное задание.

Если Вы - действительно тупик против него, можно всегда передавать сценарии через препроцессор, но это - плохая идея на многих уровнях. Если Вы собираетесь выучить язык, охватить функции того языка, а не попытки работать вокруг них. Иначе, какой смысл того, чтобы учить новый язык?

2
ответ дан 4 December 2019 в 05:50
поделиться

Возможно записать препроцессор, который берет случайным образом расположенный с отступом код с ключевыми словами псевдо-Python как "endif" и "endwhile" и правильно вещи отступов. Я должен был сделать это при использовании Python в качестве "подобного ASP" языка, потому что целое понятие "добавления отступа" становится немного нечетким в такой среде.

Конечно, даже с такой вещью действительно необходимо сделать отступ нормально, в которой точке conveter становится лишним.

2
ответ дан 4 December 2019 в 05:50
поделиться

Необходимо отключить символы табуляции в редакторе, когда Вы работаете с Python (всегда, на самом деле, по моему скромному мнению, но особенно когда Вы работаете с Python). Ищите опцию как "Пробелы использования для вкладок": у любого достойного редактора должен быть тот.

2
ответ дан 4 December 2019 в 05:50
поделиться

Я не верю так, поскольку Python является разграниченным пробелом языком. Возможно, текстовый редактор или IDE с автодобавлением отступа помогли бы. Что Вы в настоящее время используете?

2
ответ дан 4 December 2019 в 05:50
поделиться

pybraces

Это не поддерживается.

3
ответ дан 4 December 2019 в 05:50
поделиться

Мне трудно понять, когда люди отмечают это как проблему с Python. Я сразу взял к нему, и на самом деле найдите, что это - одна из моих любимых 'функций' языка :)

На других языках у меня есть два задания: 1. Зафиксируйте фигурные скобки, таким образом, компьютер может проанализировать мой код 2. Зафиксируйте добавление отступа, таким образом, я могу проанализировать свой код.

Таким образом в Python у меня есть вдвое меньше для волнения о ;-)

(nb единственное время у меня когда-либо есть проблема с добавлением отступа, когда код Python находится в блоге и форуме, который смешивает с пробелом, но это происходит все меньше и меньше, поскольку приложения становятся более умными),

3
ответ дан 4 December 2019 в 05:50
поделиться

Весь пробел выходит, я имел, когда я запускал, Python были вкладки смешивания результата и пробелы. После того как я настроил все, чтобы просто использовать один или другой, я прекратил иметь проблемы.

В моем случае я настроил UltraEdit и энергию для использования пробелов вместо вкладок.

5
ответ дан 4 December 2019 в 05:50
поделиться

Emacs! Серьезно, его использование "вкладки является командой, не символом", абсолютно идеально подходит для разработки Python.

10
ответ дан 4 December 2019 в 05:50
поделиться

Нет, нет. Добавление отступа является синтаксисом для Python. Вы можете:

  1. Используйте tabnanny.py для проверки кода
  2. Используйте осведомленного о синтаксисе редактора, который выделяется, такие ошибки (vi делает это, emacs я держал пари, что это делает, и затем, большинство IDE делает также),
  3. (неправдоподобная) запись собственный препроцессор для преобразования фигурных скобок (или безотносительно разделителей блока Вы любите) в добавление отступа
3
ответ дан 4 December 2019 в 05:50
поделиться

Нет. Добавление отступа поскольку грамматика является неотъемлемой частью языка Python, для лучше и хуже.

35
ответ дан 4 December 2019 в 05:50
поделиться
from __future__ import braces
41
ответ дан 4 December 2019 в 05:50
поделиться

Да, способ есть. Я ненавижу эти ответы «ни в коем случае», нет никакого способа, пока ты не найдешь один.

И в этом случае, чего бы он ни стоил, он есть.

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

Основные приемы - всегда использовать return в конце функции, всегда используйте проход в конце if или в конце определения класса и всегда используйте continue в конце a , а . Конечно, для этой цели подойдет любая другая неэффективная инструкция.

Затем, простой сценарий awk может взять ваш код и определить конец блока, прочитав инструкции pass / continue / return, и начало кода с инструкциями if / def / while / ...

Of Конечно, поскольку вы разработаете свой сценарий отступа, вы увидите, что вам не нужно использовать continue после возврата внутри if, потому что возврат вызовет механизм отступа назад. То же самое и в других ситуациях. Просто используйте его.

Если вы прилежны, вы сможете вырезать / вставить и добавить / удалить if и автоматически исправлять отступы. И, кстати, для вставки кода из Интернета вам потребуется немного его понять, чтобы вы могли адаптировать его к этой «неклассической» настройке.

инструкции.

Конечно, поскольку вы будете разрабатывать свой сценарий отступа, вы увидите, что вам не нужно использовать continue после возврата внутри if, потому что возврат вызовет механизм отступа назад. То же самое и в других ситуациях. Просто используйте его.

Если вы прилежны, вы сможете вырезать / вставить и добавить / удалить if и автоматически исправлять отступы. И, кстати, для вставки кода из Интернета вам потребуется немного его понять, чтобы вы могли адаптировать его к этой «неклассической» настройке.

инструкции.

Конечно, поскольку вы будете разрабатывать свой сценарий отступа, вы увидите, что вам не нужно использовать continue после возврата внутри if, потому что возврат вызовет механизм отступа назад. То же самое и в других ситуациях. Просто используйте его.

Если вы прилежны, вы сможете вырезать / вставить и добавить / удалить if и автоматически исправлять отступы. И, кстати, для вставки кода из Интернета вам потребуется немного его понять, чтобы вы могли адаптировать его к этой «неклассической» настройке.

Если вы прилежны, вы сможете вырезать / вставить и добавить / удалить if и автоматически исправить отступы. И, кстати, для вставки кода из Интернета вам потребуется немного его понять, чтобы вы могли адаптировать его к этой «неклассической» настройке.

Если вы прилежны, вы сможете вырезать / вставить и добавить / удалить if и автоматически исправить отступы. И, кстати, для вставки кода из Интернета вам потребуется немного его понять, чтобы вы могли адаптировать его к этой «неклассической» настройке.

0
ответ дан 4 December 2019 в 05:50
поделиться

Я удивлен, что никто не упомянул IDLE как хороший редактор Python по умолчанию. Приятные цвета синтаксиса, обрабатывает отступы, имеет intellisense, легко настраиваемые шрифты, и он поставляется с загрузкой Python по умолчанию. Черт возьми, я пишу в основном IronPython, но его так приятно и легко редактировать в IDLE и запускать ipy из командной строки

О, а что такого особенного в пробелах? Самый простой для чтения C или C # также имеет хороший отступ, python просто применяет очень простое правило форматирования.

1
ответ дан 4 December 2019 в 05:50
поделиться

Просто используйте Ruby, он намного лучше Python.

http://www.ruby-lang.org

-3
ответ дан 4 December 2019 в 05:50
поделиться

Любой приличный редактор программирования сведет это раздражение к нулю. Я вижу, что в Notepad ++ есть подсветка синтаксиса, вероятно, вам просто нужно правильно настроить свои предпочтения для автоматического отступа и т. Д.

0
ответ дан 4 December 2019 в 05:50
поделиться
Другие вопросы по тегам:

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