我有一个脚本解析一些XML(adf)的东西.有时我们会收到破碎的XML数据(即语法,没有结束标记等).
SimpleXMLElement抛出一个错误并杀死我的脚本,如何分配类似的东西$xml_body = new SimpleXMLElement ($adf_xml);并捕获解析异常?
/home//Work//script/email_leads.php:46
堆栈跟踪:
0 /home//Work//script/email_leads.php(46)未捕获异常'Exception',消息'String无法解析为XML' :SimpleXMLElement - > __ construct('<?xml version ="...')
1 /home//Work//script/email_leads.php(97):generateFeed()2
{main}
我习惯使用SQL数据库,我是Realm的新手,到目前为止,我对这个新移动数据库的易用性印象深刻.但有一些我真的不明白:如何处理错误抛出?
举个简单的例子:
我想在Realm DB中存储一些市场股票.
每个股票都有一个"符号"作为唯一标识符:APPL为Apple Inc,TSLA为特斯拉汽车公司等.
我认为将这些符号声明为主键是有意义的,因为它不可能有多次相同的符号在数据库中
当用户单击符号(在符号列表中)时,此符号将保存在db中.
在这个Raywenderlich教程中,它说:"为了简化本教程中所需的代码,你将使用try!调用引发错误的Realm方法.在你自己的代码中,你应该真的使用try和do/catch抓住错误并妥善处理它们."
所以根据以下模式:
do {
try realm.write {
realm.add(symbol)
}
}
catch let error as NSError {
print("Something went wrong: \(error.localizedDescription)")
}
Run Code Online (Sandbox Code Playgroud)
到目前为止它是有道理的.
如果用户点击数据库中已有的符号,我会(非常逻辑地)得到错误:
*** Terminating app due to uncaught exception 'RLMException', reason: 'Can't set primary key property 'symbol' to existing value 'APPL'.'
Run Code Online (Sandbox Code Playgroud)
问题是在运行时没有捕获到这个错误:我遇到了崩溃.
我的问题不在于如何避免这种崩溃,我当然理解通过在数据库中编写任何东西之前进行简单的测试来避免它很容易:)
我的问题是我们如何在Realm中捕捉潜在的写作错误?
难道我做错了什么?