У меня есть функция, которая может возвращать значение (тогда это должно быть int) или вести себя как процедура (т. Е. Она вообще не вызывает return, а затем фактически возвращает None
). Как вы уже догадались, это функция main()
в этом хорошо известном шаблоне:
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
Для этого подготовлена функция sys.exit()
, она принимает int
и None
одинаково.
Некоторые main()
функции просто выполняют действия и завершаются без явного return
, другие return
явного int
. Я хотел бы объявить это при постоянном вводе текста, чтобы изменение моего main()
с «ничего не возвращать» на «вернуть код выхода» не означало, что мне нужно корректировать объявление набора.
Мои испытания:
def main(argv: List[str]) -> Optional[int]:
print_something()
(Затем MyPy жалуется на отсутствие оператора return
.)
def main(argv: List[str]) -> Union[int, None]:
print_something()
(То же, что и выше.)
def main(argv: List[str]) -> Optional[int]:
print_something()
return
("ошибка: ожидаемое возвращаемое значение": ярость :)
def main(argv: List[str]) -> Optional[int]:
print_something()
return None
(Ой, давай. Но работает, да. Я не доволен бесполезным return None
в итоге. Думаю, Optional
уже дает понять, что ничего не может быть возвращено.)
def main(argv: List[str]) -> Any:
print_something()
(Конечно, работает, но использование Any
является слишком общим. Возврат, например, строка случайно не будет найдена средством проверки статического типа.)
Есть ли способ, о котором я еще не придумал, чтобы достичь того, чего хочу?