据我所知,raise如果它是一个函数,而不是一个语句,它也会起作用.
在我看来,陈述的一个显着特征是他们的论点不被解释为"代码".例如import math,不要求你定义math,类似的函数需要一个字符串参数:import("math").
另一个是,如果一个参数被解释为代码,它不一定被评估.例如,assert testbool, myfunc()将只调用myfunc()如果testbool是True.
最后,我想使用语句而不是函数可以避免由于调用函数而产生的一些开销.
这些优点都不适用于raise:它的参数总是必须被定义,并且没有raise执行语句的情况,但是它的参数没有被计算.最后,我想象一下,与提出异常所涉及的所有其他簿记相比,调用函数的开销是微不足道的.
与此同时,raise作为一个声明的代价是不能使用该词raise作为变量的名称,这将看到很多用途,因为它是一个相当普遍的英语动词.(我可以筹集一个平台,将数字提高1,......)
我还想象有更少的语句会简化编译器.
那么为什么要raise发表声明呢?
因为使它成为一个语句允许它被编译为专用字节码,解释器循环使用它来处理退出正常流并进入异常处理阶段,这涉及以与常规方式不同的方式退出函数堆栈return.
如果你把它变成了一个功能,你就无法做到这一点.该函数必须回调到解释器循环以改变状态.
此外,提升和处理异常是语言的核心,就像return在函数中一样.您希望为其他工具提供检测此类使用的能力; raise是代码流中的一个重要事件,它对Python解释器来说并不重要.代码分析工具也应该能够检测它,而不必区分raise用作原始内置函数与所有其他可能的赋值,甚至是函数的重新绑定.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |