我的代码中某处有MappingException。请帮助我如何在代码中找到引发异常的地方?
s = len(a) - i
np.concatenate([c, diff[np.random.choice(diff.shape[0], size=s, replace=False), :]], axis=0)
如果我会做类似的事情会有所帮助,还是会得到与现在相同的堆栈跟踪信息?
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
更新
问题与Doctrine并不完全相关,但与堆栈跟踪的长度有关,堆栈跟踪的长度太大且不能容纳1024个字节(默认php的设置)。因此,只需增加堆栈跟踪的最大长度即可,这可以通过以下命令完成:
[29-Mar-2019 22:30:26 Europe/Moscow] PHP Fatal error: Uncaught Doctrine\Common\Persistence\Mapping\MappingException: Class 'Client' does not exist in /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/MappingException.php:93
Stack trace:
#0 /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php(24): Doctrine\Common\Persistence\Mapping\MappingException::nonExistingClass('Client')
#1 /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(251): Doctrine\Common\Persistence\Mapping\RuntimeReflectionService->getParentClasses('Client')
#2 /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(284): Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getParentClasses('Client')
#3 /var/www/virtual/account/htdocs/vendor/doctrine/orm/lib/Doc in /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/MappingException.php on line 93
答案 0 :(得分:0)
在以下位置抛出了异常:
文件: /var/www/virtual/account/htdocs/vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/Mapping/MappingException.php
行:93
如果您想查看之前发生的情况(原因),可以检查代码的跟踪情况。我看不到整个代码,但:
如果您有未捕获异常,即使您用try catch块包装了代码,这里也只有两种主要方法:
1。您不会捕获异常。可能是因为未转义要捕获的异常,或者异常与尝试捕获的异常不同。或者您将其重新抛出(可能是您的案件)
尝试通过这种方式\Exception
try {
// application init
$app->init();
} catch (\Exception $e) {
error_log("MappingException: " . $e->getTraceAsString());
//no throw
}
如果这可行,那么您可以更改代码以具有捕获异常的方式
try {
// application init
$app->init();
//note backslash
} catch (\Doctrine\Common\Persistence\Mapping\MappingException $e) {
error_log("MappingException: " . $e->getTraceAsString());
//no throw
} catch (\Exception $e) {
error_log("GeneralExcpeption: " . $e->getTraceAsString());
//no throw
}
您总是会捕获异常,从最具体的(在您的情况下为Doctrine)到不太具体的(\ Exception)
使用getTrace可能比使用getTraceAsString()来查看导致异常的执行顺序要容易得多。 但是请帮自己一个忙,并限制您显示的条目数量,例如:
try {
// application init
$app->init();
//note backslash
} catch (\Doctrine\Common\Persistence\Mapping\MappingException $e) {
var_export(array_slice($e->getTrace(), 0, 5));
//no throw
} catch (\Exception $e) {
var_export(array_slice($e->getTrace(), 0, 5));
//no throw
}
,然后返回到您使用Client
的位置(如果数字5不够用),则将其增加到10、15等,以便能够返回到发生异常之前执行的位置。每个条目都有文件和行号,因此您可以重新创建发生的事情。
看一下您的Client
所在的代码,并检查您是否在名称空间中正确使用了该Client。如果您使用namespace
的php文件顶部有一个Client
关键字,则需要确保Client
是该namespace
的一部分或使用{{1 }}转义名称空间,并将名称\Client
视为没有名称空间。
2。异常抛出在try catch块之外(可能不是)
您可以通过向处理程序注册自己的函数来尝试捕获try / catch块之外的异常。棘手的部分是必须在将异常完美地抛出到php代码的第一行之前完成此操作。请注意,这可能与您编写的第一行不同,例如,它可以是应用程序bootstrap.php。 您可以通过在调试模式下运行Xdebug来检查应用的第一行。
这是放置异常处理程序的示例:
Client
答案 1 :(得分:0)
问题与Doctrine并不完全相关,但与堆栈跟踪的长度有关,堆栈跟踪的长度太大且不能容纳1024个字节(默认php的设置)。因此,只需增加堆栈跟踪的最大长度即可,这可以通过以下命令完成:
ini_set('log_errors_max_len', 0); // 0 - infinity length allow