抛出新异常时,最好仅在没有异常需要抛出时返回true。另外最好是返回false而不是抛出异常。我使用PHP。抛出异常和返回类型
4
A
回答
13
这一切都取决于你在做什么。就个人而言,我用他们所有的时间,这样我就不必检查返回值(A愚蠢的,而是说明性的例子):
function ArrayToObject(array $array) {
$obj = new StdClass();
foreach ($array as $key => $value) {
if (!is_string($key)) {
throw new Exception('Expects only string keys in the array');
}
$obj->$key = $value;
}
return $obj;
}
这样一来,我可以这样做:
$array = array('foo' => 'bar');
try {
echo ArrayToObject($array)->foo; //Prints "bar"
} catch (Exception $e) {
//Handle error here
}
它可以让你不用担心错误检查你的结果。您可以在catch块中正确处理错误。
所以,不,不会改变你要去基于例外返回什么......让例外处理错误,并为你改变工作流程...
一个更真实的例子(以伪代码):
try {
open database connection;
send query to database;
operate on results;
} catch (DatabaseConnectionException $e) {
handle failed connection here;
} catch (DatabaseQueryException $e) {
handle failed query here;
} catch (Exception $e) {
handle any other errors here;
}
很显然,这是假设你的数据库函数/方法抛出这些异常...
0
这取决于你的函数的目的和回国的原因。 使用异常在错误/意外情况期间从函数返回。使用标准操作的返回值。
同样,不要使用返回值来标记意外情况。如果你的函数 不会返回任何有意义的空指针引用,除以零,没有数据连接,你应该抛出异常。一,它让你用catch块隔离你的错误处理代码。二,它可以让你提供更多的信息,为什么它失败而不是'错误'。非常恼人的事情失败时,所有的信息只是'错误'。
此外,您不想抛出异常作为流量控制的替代方法。你可以变得富有创造性并且写一个比较函数,如果它是平等的,它就什么都不做,如果不相等则抛出一个GreaterThanException或LessThanException。但是,现在你已经失去了分离错误处理代码的优势(因为标准处理代码现在包含在catch块中并且包含错误代码)。另外,虽然我不确定在许多环境(如php)中执行异常处理的情况,但创建异常对象并对catch块进行类型比较而非仅仅返回可能会更昂贵。
相关问题
- 1. 抛出异常后返回
- 2. VB2008类型抛出异常
- 3. Activator.CreateInstance(类型)抛出异常
- 4. CType和类型抛出异常
- 5. 类抛出异常和泛型(java)
- 6. 返回错误并抛出异常
- 7. 返回null或抛出异常一次
- 8. 抛出异常(C#)返回错误号
- 9. 只返回没有异常抛出
- 10. Python:抛出异常或返回无?
- 11. 抛出异常或返回值
- 12. 从servlet返回JSONObject抛出异常
- 13. 抛出一个异常或返回null
- 14. 返回null或抛出异常
- 15. GWT - 抛出异常VS返回null
- 16. 抛出异常或返回值
- 17. 返回java.util.Optional或抛出(Checked/Unchecked)异常
- 18. 返回NaN还是抛出异常?
- 19. 返回值并抛出异常?
- 20. 类抛出异常
- 21. 类抛出异常
- 22. 对象类抛出类抛出异常
- 23. 400 - 抛出类型'DotNetNuke.Services.Exceptions.SecurityException'的异常
- 24. 类型'uPLibrary.Networking.M2Mqtt.Exceptions.MqttClientException'的异常被抛出
- 25. 抛出“Microsoft.WindowsAzure.StorageClient.StorageClientException”类型的异常
- 26. 类型'System.OutOfMemoryException'的异常被抛出
- 27. 类型'System.OutOfMemoryException'的异常被抛出
- 28. 异常的类型'System.Windows.Forms.AxHost + InvalidActiveXStateException'被抛出
- 29. ModelState.IsValid抛出一个异常类型System.IO.FileLoadException
- 30. 什么异常的类型抛出