我无法找到可靠的消息来源,以确保我能够在__destruct()中抛出异常。
php文档就是这样写的。
试图从析构函数抛出异常(在脚本终止时调用)将导致致命错误。
但当我测试的时候
class A
{
public function __destruct()
{
throw new \Exception();
}
}
try {
$a = new A();
} catch(\Exception $x) {
var_dump($x);
}
这似乎不是真的。我通常抛出和捕获异常。那么,为什么医生有这条线?
编辑后马克贝克的回答:
最近,我在Python的with-语句中遇到了一种奇怪的行为。我有一个代码,它使用Python的上下文管理器来回滚__exit__方法中的配置更改。管理器在__exit__中的一个最终块中有一个__exit__值。我在下面的代码中隔离了这种情况--唯一的区别是返回语句的缩进:
class Manager1(object):
def release(self):
pass # Implementation not important
def rollback(self):
# Rollback fails throwing an excepti
有时(大约100次运行中有1次),我的程序会终止,并显示以下消息:
terminate called after throwing an instance of 'Poco::SystemException'
what(): System exception
我的代码不是捕获异常的代码(我捕获的所有代码都比较冗长),并且我不确定它是在哪里捕获的。异常很可能包含有用的消息,但它不是通过what()方法返回的,而是由displayText()方法返回的。
字符串“在抛出实例后调用”在Google中有大约600k,所以它可能是由编译器插入的代码或由某个公共库(pthread?)
我正在尝试通过python脚本运行bash (或sh)脚本,如下所示:
import os
cmd="/bin/echo {1..200000}"
out=os.system(cmd)
但是,该命令不能运行,并且我得到以下错误:
/bin/echo: Argument list too long
我希望能够在我的python脚本中捕获这个错误。try/except在这里不起作用,因为它不是python错误,因此我想知道是否有其他方法来捕获它。
我有一个Bar类,它有一个Foo类型的成员。Foo类应该只在某些固定和恒定的状态下构造,这些状态是根据Tag区分的。由于我不希望在任何其他状态下构造Foo,因此我将其构造函数设为私有,并实现了一个工厂FooFactory。
在Bar的构造函数的初始化器列表中,我调用了函数make_Foo,该函数根据Tag返回正确的Foo实例。
#include <stdexcept>
#include <string>
#include <iostream>
enum class Tag
{
A,
B,
C
};
class Foo
{
publ
我刚开始处理Python中的异常。想知道得到异常类型有多重要--比如ValueError、FileNotFoundError、TypeError等等--正确的。例如:
files = os.listdir(path)
if not files:
msg = "directory is empty"
raise ValueError(msg)
显然,这不是一个ValueError。但是会引发一个错误,并显示消息。那么,我使用哪种错误类型(在功能上)重要吗?还是主要是告知用户出了什么问题?
boost-python不能够捕获在使用它的帮助编写的扩展模块中抛出的异常并将其转换为python的原因是什么?相反,解释器使用terminate called after throwing an instance of '<some_excpetion_class>'崩溃。
我的扩展模块使用了CGAL的一些函数,它与CGAL动态链接,并抛出异常。它还动态地链接到boost_python共享库。我在linux上。它是用'-std=c++11'编写的,我更喜欢用clang编译。
我的第一个想法是,这是一个在共享库边界上抛出异常的问题。然而,我做了我所能