#include <fstream>
#include <iostream>
#include <map>
int main(int argc, char** argv) {
try {
std::map<std::string, int> m{{"a", 1}, {"b", 2}};
std::cout << m.at("c") << std::endl;
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
В С++ при извлечении несуществующего ключа карты исключение выглядит как map::at: key not found
. Информация о том, что является ключом, не предоставляется.
Кроме того, если вы обращаетесь к несуществующему файлу, сообщение об исключении std::ios_base::failure
выглядит как ios_base::clear: unspecified iostream_category error
. Имя файла, вызвавшего исключение, не предоставляется. Таким образом, может потребоваться достаточно времени, чтобы выяснить, где исключение, если в проекте используется много map.at()
или ifstream is
.
В отличие от этого, Python может сказать вам KeyError: 'c'
или FileNotFoundError: [Errno 2] No such file or directory: 'foo'
.
Это просто соглашение на С++? Спасибо.