Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Здесь происходит несколько вещей:
Вы используете кортеж в качестве значения ветвления для if
. Достоверность предиката указывает только, является ли он пустым или нет, и ничего о его содержимом:
assert bool(tuple()) is False
assert bool((False, )) is True
Во-вторых, если вы заранее знаете количество элементов в кортеже, используя or
s и [ 115] s обычно более читабелен, как вы упомянули:
if is_dog or is_cat:
do_something()
И, наконец, вы можете использовать any
для произвольного числа значений:
values = [is_dog, is_cat, ... more]
if any(values):
do_something()
Это не хорошая практика, чтобы увидеть, является ли либо bool True
:
if (False,False):
print("it does not do what you think it does")
Вывод:
it does not do what you think it does
См. Python True проверка значения : любой непустой кортеж имеет значение True
-й
. Правильный путь:
if a or b:
pass
. Для кратных можно использовать . any()
:
if any(x for x in (False, True)):
pass # will enter here if any part of the tuple is True
else:
pass # will enter here if no part of the tuple is True