Java: зачем генерировать исключение, а не выводить сообщение об ошибке? [Дубликат]

iloc работает на основе целочисленного позиционирования. Поэтому, независимо от того, какие метки ярлыков вы можете, например, получить первую строку, выполнив

df.iloc[0]

или последние пять строк, выполнив

df.iloc[-5:]

. Вы можете также используйте его на столбцах. Это извлекает третий столбец:

df.iloc[:, 2]    # the : in the first position indicates all rows

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

df.iloc[:3, :3] # The upper-left 3 X 3 entries (assuming df has 3+ rows and columns)

С другой стороны, .loc используют именованные индексы. Давайте создадим кадр данных со строками в виде ярлыков строк и столбцов:

df = pd.DataFrame(index=['a', 'b', 'c'], columns=['time', 'date', 'name'])

Затем мы можем получить первую строку по

df.loc['a']     # equivalent to df.iloc[0]

, а вторую две строки в 'date' столбца

df.loc['b':, 'date']   # equivalent to df.iloc[1:, 1]

и т. д. Теперь, вероятно, стоит отметить, что индексы строк и столбцов по умолчанию для DataFrame являются целыми числами от 0, и в этом случае iloc и loc будут работать одинаково. Вот почему ваши три примера эквивалентны. Если у вас был нечисловой индекс, такой как строки или даты, df.loc[:5] вызовет ошибку.

Кроме того, вы можете выполнить поиск столбцов только с помощью фрейма данных __getitem__:

df['time']    # equivalent to df.loc[:, 'time']

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

df.ix[:2, 'time']    # the first two rows of the 'time' column

EDIT: Я думаю, что также стоит упомянуть, что вы можете передавать логические векторы в метод loc. Например:

 b = [True, False, True]
 df.loc[b] 

Вернет 1-ю и 3-ю строки df. Это эквивалентно df[b] для выбора, но его также можно использовать для назначения через логические векторы:

df.loc[b, 'name'] = 'Mary', 'John'
0
задан lourdh 22 May 2014 в 02:14
поделиться

3 ответа

Нет, обработка исключений предназначена для обработки, а также исключительных обстоятельств. Я бы предположил, что примеры, которые вы видите, не завершены. Запись / печать трассировки стека на System.err может быть хорошей идеей, но на самом деле это не всегда необходимо (хотя и неоценимо при попытке отладки вашего кода), и это конечно not вся обработка исключений используется для.

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

int userValue = Integer.parseInt(textBox.getText());

Что произойдет, если пользователь вводит письмо? Ну, это исключительное условие - parseInt() пытается разобрать целое число, так что в мире это будет делать с письмом? Таким образом, исключительное условие запускает NumberFormatException. Здесь правильный способ справиться с этим исключением, вероятно, заключался бы в том, чтобы предупредить пользователя о том, что его ввод недействителен.

Что касается вопроса 2, вы можете получить ArithmeticExceptions при попытке создать BigDecimal, десятичное представление которого не заканчивается:

BigDecimal a = new BigDecimal("1").divide(new BigDecimal("3"));

Если память используется, это должно вызывать ArithmeticException ...

2
ответ дан awksp 23 August 2018 в 21:35
поделиться

Обработка исключений в Java - это управление ошибками. Это способ изящно обрабатывать ошибки в ваших программах. Например, вы можете использовать Integer.parseInt () для преобразования строки в целое число. Он выдает исключение NumberFormatException, если он не может проанализировать строку. В этом случае вы можете поймать исключение, по умолчанию значение и отобразить соответствующее сообщение пользователю. И ваша программа будет более надежной и элегантной.

1
ответ дан Edwin Torres D.Eng. 23 August 2018 в 21:35
поделиться

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

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

Возьмите, для Например, ваш ArithmeticException. Это исключение, которое возникает, когда какая-то часть приложения решает что-то делить на ноль или по другим причинам (другие классы могут это бросить, вам придется прочитать документацию и выяснить, почему). Java решает, что он не может разумно восстановить из этого, поэтому он выдает исключение во время выполнения или исключение, которое обычно не предназначено для улавливания.

Я рекомендую вам взглянуть на Исключения Trail из Oracle, поскольку это предоставит бесценные знания о том, каковы разные типы исключений. Просто обратите внимание, что если у вас есть исключение в коде, лучше изучить причину , а не ловить его (и / или подавить).

2
ответ дан Makoto 23 August 2018 в 21:35
поделиться
Другие вопросы по тегам:

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