os.system
принимает в качестве аргумента строку , поэтому вы можете использовать все, что изменяет строку. Например, форматирование строки :
os.system('shutdown -s -t 10 -c {0}'.format(s))
В отличие от Java, C ++ не имеет «стандартной структуры», а имеет лишь небольшую (и необязательную) стандартную библиотеку. Более того, у программистов на С ++ существуют разные мнения о том, следует ли вообще использовать исключения .
Поэтому вы найдете разные рекомендации от разных людей: некоторые любят использовать типы исключений из стандартной библиотеки, некоторые библиотеки (например, Poco) используют пользовательскую иерархию исключений (полученную из std :: exception), а другие не используют исключения вообще (например, Qt).
Если вы хотите придерживаться стандартной библиотеки, существует специальный тип исключения: invalid_argument
(extends logic_error
).
#include <stdexcept>
// ...
throw std::invalid_argument("...");
Для справки: Вот обзор стандартных типов исключений, определенных (и задокументированных) в stdexcept
:
exception
logic_error
domain_error
invalid_argument
length_error
out_of_range
runtime_error
range_error
overflow_error
underflow_error
Я всегда использую std::invalid_argument
для незаконных аргументов.
Вы можете бросить стандартное исключение или бросить свое собственное. Возможно, вы захотите включить дополнительную информацию в создаваемое вами исключение, и это будет хорошим поводом сделать самостоятельно.
Лично я не видел такой проверки домена в системах, над которыми работал. Это, конечно, не универсально.
станд.:: domain_error может быть тем, что Вы ищете, но я подозреваю, что очень немного людей используют его. Большинство людей получает свои собственные типы исключительной ситуации из станд.:: исключение.
Если недопустимым Вы имеете в виду, не делает удовлетворенных математических ожиданий метода, которые можно бросить
std::logic_error
or
std::runtime_error.
Если Вы подразумеваете, что что-то связанное с бросками как один объект не может быть преобразовано в другого - нет никакого исключения для этого, и это не будет брошено автоматически.
На самом деле это будет. Но только для dynamic_cast <> на ссылках. Это бросит
std::bad_cast
Я не уверен, что это - хорошая идея бросить этого Вашим собственным.
Я предпочитаю использовать logic_error и его производные в случае, если кто-то передал неправильный параметр, потому что это - логическая ошибка: программист передал неправильный тип аргумента.
Но больше из всего, что мне нравится использовать, утверждает в таких случаях. Поскольку такие вещи как передача неправильных значений или типов к Вашей функции могут быть приемлемыми только во время разработки, и таких проверок нужно избежать в выпуске.