python和php什么关系,最终PHP和Python之间的关系差异并退出

概要

Python sys.exit()和exit引发内置异常SystemExit。

因此,它表现为try-catch的一部分,并且也输入finally。

SystemExit继承了BaseException,因此它不会被catch错误地捕获为正常异常或错误。 (您也可以自觉地catch。)

换句话说,可以认为关闭处理是在接收到上部SystemExit的地方执行的。

由于PHP的exit()是关闭过程,因此将执行析构函数和关闭函数,但不会传递finally作为异常机制。

和exit作为例外处理是不同的。

的PHP

您可以在

exit的说明和用户注释中找到它。

PHP:退出--Manual

示例3执行关闭功能或析构函数的示例

class Foo

{

public function __destruct()

{

echo 'Destruct: ' . __METHOD__ . '()' . PHP_EOL;

}

}

function shutdown()

{

echo 'Shutdown: ' . __FUNCTION__ . '()' . PHP_EOL;

}

$foo = new Foo();

register_shutdown_function('shutdown');

exit();

echo 'これは出力されません。';

?>

上面示例的输出如下。

Shutdown: shutdown()

Destruct: Foo::__destruct()

PHP:退出--Manual:用户贡献的注释

与finally一起使用exit的注释:如果您在try块中的某个位置退出,将不会执行finally。听起来似乎不明显:例如,在Java中,您永远不会发出exit,至少返回您的控制器;在PHP中,您可能会发现自己退出了控制器方法(例如,如果发出重定向)。

以下是POC:

echo "testing finally wit exit\n";

try {

echo "In try, exiting\n";

exit;

} catch(Exception $e) {

echo "catched\n";

} finally {

echo "in finally\n";

}

echo "In the end\n";

?>

这将打印:

测试终于退出了

在尝试中,退出

还有一种方法可以引发异常而不是

退出,并使用catch来编写终止过程,但这似乎不是一个完美的选择。

用PHP7运行它是很自然的,但是结果是一样的。

Python

Uchan注意:Python exit(),sys.exit()和os._exit()之间的区别

如果您看的话,一目了然。

除了

os._exit()之外,还会引发异常,因此finally也很重要。

当说os._exit()等同于PHP的exit()时,看起来有些不同。

exit

4.内置常量-Python 2.7.x文档

当显示

时,输出诸如"使用quit()或Ctrl-D(即EOF)退出"之类的消息,并在调用时发送带有指定退出代码的SystemExit。这是一个对象。

sys.exit()

28.1.sys —系统参数和功能— Python 2.7.x文档

退出

Python。由于exit()发送SystemExit,因此您可以在try语句的finally子句中编写终止过程,或者在更高级别捕获异常并中断exit过程。

(略)

最终,exit()只是"抛出"异常,因此从主线程调用它时,它只是终止进程而不会阻止异常。

6.内置异常-Python 2.7.x文档

sys.exit()函数引发此异常。如果未处理此异常,则Python解释器将退出而不在堆栈上显示任何回溯。如果关联值是规则整数,则表示系统退出状态(传递给exit()函数)。如果值为None,则退出状态为0。对于其他类型(例如字符串),将显示该对象的值,并且退出状态为1。

此异常的实例具有属性代码。此值设置为退出状态或错误消息(默认为无)。同样,此异常严格来说也不是错误,因此它是从BaseException而不是StandardError派生的。

sys.exit()允许执行清理过程(try语句的finally子句),并允许执行脚本而不会冒调试器失控的风险。当您确实需要立即退出时(例如,在调用fork()之后的子进程中),可以使用os._exit()函数。

此异常继承自BaseException,而不是StandardError或Exception继承,因此,捕获异常的代码不会错误地捕获它。这将稳定地将此异常传播给调用者并终止解释器。

在版本2.5中更改:已更改为继承BaseException。

确实!是不是。

os._exit()

15.1。操作系统-其他操作系统接口-Python 2.7.x文档

以退出状态n退出进程。这时,不调用清除处理程序,并且不刷新标准I / O缓冲区。

相关文章

来自同一博客。

finally这是从没有时代到实现之后的时代的过渡,但是

这次结合exit的操作,我认为析构函数已被重新识别。

PHP最终没有,但是有一个析构函数:Architect Note

最后编写,析构函数编写:架构师说明

为什么PHP最终仍需要:架构师说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值