Код: Выделить всё
import os
def clear_console(func):
def wrapper(*args, **kwargs):
os.system("cls")
result = func(*args, **kwargs)
os.system("cls")
return result
return wrapper
@clear_console
def invalid_input_menu():
input("Invalid input. Press ENTER to continue...")
@clear_console
def my_menu(some_data):
print(some_data)
is_this_data_correct = input("Is this data correct? (Y/N) ").strip().upper()
if is_this_data_correct not in {"Y", "N"}:
invalid_input_menu()
return my_menu(some_data)
return is_this_data_correct == "Y"
< /code>
Я использовал этот подход к тому, что мне пришлось добавить дополнительные параметры в одно из моих меню. Моя проблема заключается в том, что если к такой функции добавлены больше параметров, следует также обновлять его повторный вызов, например, если я хочу добавить еще один параметр в my_menu
Если меню возвращается с None -> Я не могу использовать это, когда я хочу, чтобы функция фактически не возвращала ни одного < /li>
Если меню возвращается с помощью пользовательских экземпляров класса, которые я определяю, чтобы указать, что я хочу повторить функцию -> ее полезной, потому что я могу вернуть информацию о валидации, но и для этого, но не в номинации, но не для того, чтобы не об этом, не в этом, но не в этом. И это странно, если его возвращение с некоторыми странными экземплярами класса < /li>
Если меню поднимает определенное исключение, обертка может поймать ее и повторить, чтобы назвать функцию меню -> звучит правильно, но я не думаю, что это обычное использование исключений < /li>
< /ul>
heres. PrettyPrint-Override ">import os
def clear_console(func):
def wrapper(*args, **kwargs):
os.system("cls")
result = func(*args, **kwargs)
os.system("cls")
return result
return wrapper
class InvalidInputRetryEvent(Exception):
def __init__(self, user_input):
self.user_input = user_input
@clear_console
def print_invalid_input_menu(self):
if not self.user_input:
msg = "Invalid input: empty value"
else:
msg = f"Invalid input: {self.user_input}"
input(msg)
def retryable(func):
def wrapper(*args, **kwargs):
while True:
try:
return func(*args, **kwargs)
except InvalidInputRetryEvent as e:
e.print_invalid_input_menu()
return wrapper
@retryable
@clear_console
def my_menu(some_data):
print(some_data)
is_this_data_correct = input("Is this data correct? (Y/N) ").strip().upper()
if is_this_data_correct not in {"Y", "N"}:
raise InvalidInputRetryEvent(user_input=is_this_data_correct)
return is_this_data_correct == "Y"
print(my_menu("aknwor anw\niwgnwinoi n\nowngwoijgwjg"))
< /code>
Как вы думаете, что это решение приемлемо? Если нет, то как еще я могу просто решить?
Подробнее здесь: https://stackoverflow.com/questions/795 ... r-function