2016-09-14 122 views
0

在Python中,如果遇到错误(例如,函数参数是错误的数据类型,由于格式错误等原因无法对数据进行操作),我向终端输出错误,运行sys.exit()来杀死它。我还没有到处学习错误处理,异常处理或其他什么,所以这就是我使用这种方法的原因。 JavaScript错误/异常/无论处理看起来简单,但会引发或抛出代码的执行?如果没有,那我该怎么做?在JavaScript中停止执行

说我只想要一个函数(和扩展,整套代码)工作,如果我所在的页面匹配特定的URL。当页面是错误的URL时调用该函数应该将消息记录到控制台并停止脚本的执行。我怎么做?只需在try区块进行测试?我是否需要使用一些用于处理错误/异常的特殊语法?

+0

是的,这就是JS(和Python)中的异常工作。抛出代码的执行直到最接近的catch处理程序。 – Bergi

+0

您还需要考虑代码的性质(异步或同步)。例如,在HTTP请求之后抛出错误不会停止请求,也不会有任何关联的回调。 – MinusFour

+0

@Bergi我没有想到。我认为'catch'可以用来报告错误,然后退出。我在我的函数中使用它,我仍然得到一个对象返回。 – Melab

回答

0

当页面错误的URL时调用该函数应向控制台记录消息并停止脚本的执行。我怎么做?

如果URL不可接受,请输入error并附上问题描述。例如

throw new Error("operation x not supported at this page location"); 

这会导致消息被记录到控制台。确保在throw语句周围控制try...catch语句的缺席,或者在导致该语句的任何函数调用周围,在抛出错误时暂停执行。

正如评论中提到的,抛出异常不会取消尚未从已启动但未完成的异步操作进行的回调。

如果try...catch语句是在效果时引发错误,执行与不按throw语句的(其他)代码进一步执行控制catch语句恢复,并且在不恢复中介函数调用。


编辑回应评论:

,没有抓住它的功能不返回内执行throw语句的功能。也就是说,它不会在调用代码后立即返回值并立即恢复执行。

如果用户编写的try块围绕直接或间接调用引发该错误的函数,调用堆栈将恢复为执行try块时生效的调用堆栈。在try块中为函数调用而创建的任何堆栈框架将从调用堆栈中弹出并丢弃,而无需进一步执行调用的函数。执行继续执行与try块关联的catch块,传递作为catch参数抛出的错误,或者如果没有提供catch块,则在finally块中执行。 系统不会自动将在try块内抛出的错误记录到控制台。

如果找不到用户写入的try块,则会弹出所有调用堆栈帧,线程死亡并将抛出的错误记录到控制台。因此,在try块之外抛出一个错误会停止执行,而不调用退出函数。

Python中的try...cacth的等价物似乎是try...exceptraise语句用于throw,语法略有不同。

+0

这是否会阻止使用它的函数返回对象? – Melab

+0

那么如何调用产生错误的函数应该停止?在Python中,如果我编写将错误类型传递给特定函数的函数,则所有执行都将停止。 – Melab