什么是PHP替换PHP的error_get_last()函数?

时间:2016-07-31 14:19:16

标签: php python exception-handling port

我需要实现一个atexit Python函数,它将获取最后一个错误对象并检查它的类型。如果python错误的类型对应于PHP E_ERROR,我应该将错误的输出保存到文件中。

我移植的PHP代码如下所示:

register_shutdown_function( "fatal_handler" );
function fatal_handler() {
  $error = error_get_last();
    if ($error != null && $error['type'] === E_ERROR)
        echo  "recordFatalError: {$error['message']}\n";
}

我的代码快照如下:

def fatal_handler():
   # How to get last error object?

atexit.register(fatal_handler)

如果有人解释我如何使用python获得必要的功能,我会很高兴。

2 个答案:

答案 0 :(得分:2)

我会使用sys.last_value

getattr(sys, 'last_value', None)

您可以选择使用None代替上面的EAFP approach。如果sys.last_value不可用,则返回import sys def fatal_handler(type, value, traceback): e = value sys.excepthook = fatal_handler

或者,如果仅在解释器关闭是由异常引起时才想运行一个函数,则可以使用sys.excepthook

cpu_handle = dma_alloc_coherent(NULL, dma_size, &dma_handle, GFP_KERNEL | GFP_DMA);

答案 1 :(得分:1)

当引发异常并且未被捕获时,解释器会使用有关异常的信息调用sys.excepthook。默认函数打印出sys.stderr的给定回溯和异常。您可以使用保存此数据的功能替换此功能。稍后您可以在atexit处理程序中使用此数据:

import atexit
import sys

class LastException:
    value     = None
    type      = None
    trackback = None

    @staticmethod
    def excepthook(type,value,trackback):
        LastException.type      = type
        LastException.value     = value
        LastException.trackback = trackback

    @staticmethod
    def register():
        sys.excepthook = LastException.excepthook

def fatal_handler():
   print('{0} {1}'.format( LastException.type, LastException.value))

LastException.register()
atexit.register(fatal_handler)

raise BaseException("I am an error") 
# should print: <class 'BaseException'> I am an error