本文已参与「新人创作礼」活动,一起开启掘金创作之路。
QT中有自己的异常类:QException这个类中会记录一些异常信息(废话),但这些异常信息有时候不是我们所需要的,我们可能更加需要一些自定义的信息,例如记录一些状态码的错误日志等等。
下面举个栗子:
QJsonParseError error;
const QJsonDocument document = QJsonDocument::fromJson(json.toUtf8(),&error);//解析json
/*----------------------不用看-----------------*/
if(error.error==QJsonParseError::NoError)//当解析json没有错误时
{
const QJsonObject &obj = document.object();
const QString name = obj.value(QStringLiteral("name")).toString();
int age = obj.value(QStringLiteral("age")).toInt();
const QJsonObject &insideObject = obj.value(QStringLiteral("langurage")).toObject();
QJsonArray array = insideObject.value(QStringLiteral("国籍")).toArray();
QList<QString> ll;
for(const QJsonValue &ss : array)
{
ll.append(ss.toString());
}
return Formgramer(name,age,ll);
}
/*------------------------------------------------*/
qDebug()<<"error"<<endl;
throw error.errorString();
这是一个解析JSon的函数实现,这里如果解析出错就会向外抛出一个错误字符串,然后在使用这个函数的地方使用try catch 来接收就可以实现自己想要的错误提示了:
try {
xxx
}
} catch (QString &ex) {
Log::cin_httplog( QDateTime::currentDateTime().toString("yyyy-MM-dd hh.mm.ss ") + "发送失败"+ex); //输出到txt文件
return false;
}
这里我是输出到日志中的,也可以输出到控制台:
qDebug()<<ex<<endl;
抛出异常的地方也可以写成:
throw "oh! have error";
使用自己能辨识的异常,也可以快速定位到出现问题的代码,如果不嫌麻烦的话也可以在输出的信息前面加上文件名,函数名之类的前缀。