Ошибка Символы и названия условий
Когда вы сигнализируете об ошибке, вы указываете символ ошибки, чтобы указать вид ошибки, которую вы имеете в виду. Каждая ошибка имеет один и только один символ ошибки для ее классификации. Это лучшая классификация ошибок, определенная языком Emacs Lisp.
Эти узкие классификации сгруппированы в иерархию более широких классов, называемых состояниями ошибок , которые идентифицируются именами условий . Самые узкие такие классы принадлежат самим символам ошибок: каждый символ ошибки также является именем условия. Существуют также имена условий для более обширных классов, вплоть до error
имени условия, которая принимает все виды ошибок (но не quit
). Таким образом, каждая ошибка имеет одно или несколько имен условий: error
, символ ошибки, если он отличается от error
, и, возможно, некоторые промежуточные классификации.
- Функция: определение- сообщение об ошибке и необязательный родительский элемент
-
Чтобы символ был символом ошибки, он должен быть определен с помощью
define-error
, которая принимает родительское условие (по умолчаниюerror
). Этот родитель определяет условия, которым принадлежит этот вид ошибки. Переходный набор родителей всегда включает в себя сам символerror
и символ ошибки . Поскольку выход не считается ошибкой, набор родительских элементов дляquit
— это просто(quit)
выход ) .
В дополнение к своим родителям символ ошибки имеет message , представляющее собой строку, которая будет напечатана, когда об этой ошибке сообщается, но она не обрабатывается. Если это сообщение недопустимо, сообщение об ошибке ‘peculiar error‘ используется. См. Определение сигнала .
Внутри набор родительских элементов сохраняется в свойстве error-conditions
символа ошибки, а сообщение сохраняется в свойстве error-message
символа ошибки.
Вот как мы определяем новый символ ошибки, new-error
:
(define-error 'new-error "A new error" 'my-own-errors)
У этой ошибки есть несколько названий условий: new-error
, самая узкая классификация; my-own-errors
, которые, как мы представляем, являются более широкой классификацией; и все условия my-own-errors
которые должны включать error
, которая является самой широкой из всех.
Строка ошибки должна начинаться с большой буквы,но не должна заканчиваться периодом.Это для согласованности с остальными Emacs.
Естественно, Emacs никогда не будет сигнализировать о new-error
по себе; только явный вызов signal
(см. Определение сигнала ) в вашем коде может сделать это:
(signal 'new-error '(x y)) error→ A new error: x, y
Эту ошибку можно обработать с помощью любого из ее имен условий. В этом примере обрабатывается new-error
и любые другие ошибки в классе my-own-errors
:
(condition-case foo (bar nil t) (my-own-errors nil))
Важным способом классификации ошибок является их имена условий — имена, используемые для сопоставления ошибок с обработчиками. Символ ошибки служит только удобным способом указать предполагаемое сообщение об ошибке и список имен условий. Было бы неудобно давать signal
список имен условий, а не один символ ошибки.
Напротив, использование только символов ошибок без имен условий серьезно снизило бы силу condition-case
. Когда вы пишете обработчик ошибок, имена условий позволяют категоризировать ошибки на различных уровнях универсальности. Использование одних только символов ошибок устранит все, кроме самого узкого уровня классификации.
См. Стандартные ошибки для получения списка основных символов ошибок и их состояний.
Elisp
28.2
-
Ввод отладчика при ошибке
-
Error Messages
-
Errors
-
Eval
dbi, locale, perl
0
1
Как поменять кодировку или локаль для DBI?
Ругается на что-то, но вот на что — не понять.
[Tue Apr 16 14:22:08 2013] [error] DBI connect('dbname=mg;host=127.0.0.1','game',...) failed: �����: о��ав�ие�� �ло�� подкл��ений за�езе�ви�ован� дл� подкл��ений ��пе�пол�зова�ел� (не дл� �еплика�ии) at /usr/lib/perl5/site_perl/5.16.0/Rose/DB.pm line 965.
- Ссылка
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
У меня есть две ошибки набора символов, которые мешают мне посеять мою базу данных со старым содержимым базы данных.
1. Код ошибки 1366: Неверное строковое значение «\ xDB»
Я попытался изменить CHARACTER SET
моего TABLE
на utf8mb4
.
Я посмотрел, что \xDB будет как тип символа, и наткнулся на это. Это заставило меня поверить в формат Javascript escape. Однако я не могу найти MySQL CHARACTER SET
который поддерживает это.
Даже если я найду CHARACTER SET
который поддерживает формат escape- utf8mb4
Javascript, не лучше ли преобразовать все в более стандартный и всеохватывающий utf8mb4
? Как это будет сделано?
2. Код ошибки 1300: Неверная строка символов utf8mb4
Это оскорбительный характер:
Опять же, я пробовал подобные вещи, как упоминалось выше, с небольшим успехом.
РЕДАКТИРОВАТЬ:
Я установил CHARACTER SET
в новую базу данных следующим образом:
CREATE TABLE 'products' (
'product_id' INT NOT NULL AUTO_INCREMENT UNIQUE,
'product_line' VARCHAR(255) NOT NULL,
'product_num' VARCHAR(255) NOT NULL,
'description' LONGTEXT NOT NULL,
PRIMARY KEY ('product_id')
) CHARACTER SET utf8mb4 ;
EDIT 2:
Я не знал, что это имело значение, но проблема LOAD DATA INFILE
при выполнении LOAD DATA INFILE
следующим образом:
USE 'inventory';
LOAD DATA INFILE
'all_products.csv'
INTO TABLE 'products'
FIELDS
TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES
TERMINATED BY ',\r\n'
IGNORE 1 ROWS
('product_line','product_num','description');