Exception handling D中捕获的替代品?

Exception handling D中捕获的替代品?,exception-handling,d,Exception Handling,D,我在看,它基本上说不要使用try/catch/finally(大约38分。39:30说你不想查看它生成的try/catch),使用范围(失败)更好(还有退出和成功) 我的问题是,如果要检查异常并基于异常执行操作,例如警告用户磁盘没有空间或将url标记为404(.NET webclient/webrequest抛出此错误代码),或者如果出现500错误代码,则稍后重试,会发生什么情况。我该怎么做?我必须使用try/catch还是有其他方法?scope语句允许您在退出声明它们的作用域时运行代码作用域(

我在看,它基本上说不要使用try/catch/finally(大约38分。39:30说你不想查看它生成的try/catch),使用范围(失败)更好(还有退出和成功)


我的问题是,如果要检查异常并基于异常执行操作,例如警告用户磁盘没有空间或将url标记为404(.NET webclient/webrequest抛出此错误代码),或者如果出现500错误代码,则稍后重试,会发生什么情况。我该怎么做?我必须使用try/catch还是有其他方法?

scope
语句允许您在退出声明它们的作用域时运行代码<代码>作用域(成功)正常退出作用域时运行<代码>作用域(失败)在由于引发异常而退出作用域时运行<代码>范围(退出)在退出范围时运行,无论您如何退出范围。它们都不允许您访问任何抛出的异常。它们只允许您在退出当前作用域时根据退出该作用域的方式运行代码


因此,从本质上讲,在捕获异常的情况下,执行某些操作,然后在不关心异常实际是什么的情况下再次抛出异常,
scope(failure)
可以用来代替
catch
,而
scope(exit)
可以用来代替
finally
。但是,如果您确实需要异常,则必须使用
try
-
catch
块捕获它
scope
只是不允许您访问异常,因此,如果您想对引发的异常执行某些操作,则不能使用
scope
语句。但是,
scope
在您不关心异常实际是什么的情况下非常有效。

scope
不会取代
catch
。在实际处理(或恢复)异常时,必须使用
catch
。如果您想在堆栈展开过程中进行清理,请使用
范围
或有时使用
最终
。这样,您将获得更干净、更易于维护的代码。

这就是我的想法。我只是想确定我没有遗漏任何东西。很高兴听到+1并接受