我正在使用Slim来编写REST API,我遇到了一种情况,我需要检查用户输入的日期时间是否有效,从而提出了此代码
$app->post('/test', function() use($app)
{
verifyRequiredParams(array('d_string'));
$response = array();
$d_string = $app->request->post('d_string');
try {
$datetime = datetime::createfromformat('d M Y H:i:s', $d_string);
$output = $datetime->format('d-M-Y H:i:s');
}
catch (Exception $e) {
$response["error"] = true;
$response["message"] = $e->getMessage();
echoRespnse(400,$response);
}
$response["error"] = false;
$response["message"] = "Converted Date";
$response['output'] = $output;
echoRespnse(200,$response);
});
当我输入有效的日期时间字符串时,它可以正常工作,例如11-Dec-2015 12:18
,但如果只是出于测试目的,我输入一些随机字符串,它会给出500个内部错误,而不是给我任何异常。
为什么它忽略try catch块???
错误信息
PHP 致命错误: 调用非对象上的成员函数格式 ()
如果提供的时间字符串无效,则< code > DateTime::createFromFormat 不会引发异常,但会返回布尔值false。
所以你真的不需要一个try/catch
块来完成这个:
$datetime = \DateTime::createFromFormat('d M Y H:i:s', $d_string);
if (false === $datetime) {
// send your 400 response and exit
}
$output = $datetime->format('d-M-Y H:i:s');
// the rest of the code
如果出于各种原因,您确实想保留< code>try/catch块,您可以自己抛出一个异常并在本地捕获它:
try {
$datetime = \DateTime::createFromFormat('d M Y H:i:s', $d_string);
if (false === $datetime) {
throw new \Exception('Invalid date.');
}
$output = $datetime->format('d-M-Y H:i:s');
} catch (\Exception $e) {
$response["error"] = true;
$response["message"] = $e->getMessage();
echoRespnse(400,$response);
}
但是,在这种情况下,我没有看到一个很好的理由来抛出一个例外,只是为了在本地捕获它,所以我会选择第一个解决方案。
如果要显示更详细的错误消息,可以使用日期时间::get上次错误方法。
我有一个使用JSoup连接和解析网站数据的程序。当网站在我给出的10秒超时后无法连接时,JSoup方法会抛出一个Uncheck edIOException。这可能包含一个IOException,例如“SSL Peer意外关闭”或“超时”,这是我过去处理过的IOExceptions。这很奇怪,因为它包含一个try catch: 我已经做了各种变通方法,比如在try-catch中包装该方法,使该方法抛
问题内容: 我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下 但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示: 我希望有人能够解释为什么
null 但是,在完成while循环之后,被完全忽略。我已经用调试器检查了字符串中的数据,它是正确的!没有错误,没有例外。
问题内容: 我正在审查一些新代码。该程序仅具有try和finally块。由于不包含catch块,如果try块遇到异常或任何可抛出的异常,它将如何工作?它是否直接进入了finally块? 问题答案: 如果try块中的任何代码都可以引发已检查的异常,则它必须出现在方法签名的throws子句中。如果引发了未经检查的异常,则该异常会冒泡退出方法。 无论是否引发异常,都始终执行finally块。
我实现了一个try-catch块。 我试图用一种特定的方式实现捕捉块,但是它不太好用。如果输入不是整数,它应该重复并返回到try块。它只工作一次,但更多。 你能给我一些帮助吗?非常感谢。
本文向大家介绍try-catch-finally 中哪个部分可以省略?相关面试题,主要包含被问及try-catch-finally 中哪个部分可以省略?时的应答技巧和注意事项,需要的朋友参考一下 try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同时省略,也就是说有 try 的时候,必须后面跟一个 catch 或者 finally。