Эта же проблема возникает со мной, но с другим использованием. Когда я попытался обернуть функцию API с помощью 2 декораторов:
У меня есть такое же исключение, потому что я пытался обернуть несколько функций этими двумя декораторами:
@app.route("/path1")
@exception_handler
def func1():
pass
@app.route("/path2")
@exception_handler
def func2():
pass
В частности, это вызвано попыткой зарегистрировать несколько функций с помощью обертки имени:
def exception_handler(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
error_code = getattr(e, "code", 500)
logger.exception("Service exception: %s", e)
r = dict_to_json({"message": e.message, "matches": e.message, "error_code": error_code})
return Response(r, status=error_code, mimetype='application/json')
return wrapper
Изменение имени функции, которая была решена для меня (wrapper.func_name = func.func_name):
def exception_handler(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
error_code = getattr(e, "code", 500)
logger.exception("Service exception: %s", e)
r = dict_to_json({"message": e.message, "matches": e.message, "error_code": error_code})
return Response(r, status=error_code, mimetype='application/json')
# Renaming the function name:
wrapper.func_name = func.func_name
return wrapper
Затем было выполнено декорирование более чем одной конечной точки.
Разделить на позицию нулевой длины, которая следует за последовательностью букв.
Код: Демонстрация
$string = 'ABC00001';
$output = preg_split('~[A-Z]+\K~', $string);
var_export($output);
В \K
написано, что нужно забыть предыдущие сопоставленные символы.
Вы можете использовать preg_split
с флагами PREG_SPLIT_DELIM_CAPTURE
и PREG_SPLIT_NO_EMPTY
, чтобы делать то, что вы хотите:
$string = 'ABC00001';
$output = preg_split('/([A-Z]+)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
print_r($output);
Вывод:
Array ( [0] => ABC [1] => 00001 )
[119 ] Демонстрация на 3v4l.org