Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是Python替代PHP';s错误\u get\u last()函数?_Python_Php_Exception_Porting - Fatal编程技术网

什么是Python替代PHP';s错误\u get\u last()函数?

什么是Python替代PHP';s错误\u get\u last()函数?,python,php,exception,porting,Python,Php,Exception,Porting,我需要实现一个atexitPython函数,该函数将获取最后一个错误对象并检查其类型。如果python错误的类型对应于PHP的E_错误,我应该将错误的输出保存到一个文件中 我移植的PHP代码如下所示: register_shutdown_function( "fatal_handler" ); function fatal_handler() { $error = error_get_last(); if ($error != null && $error['type

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

我移植的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获得必要的功能,我将非常高兴。

我将使用:

import atexit
import sys

def fatal_handler():
    try:
        e = sys.last_value
    except AttributeError: # no exception prior to execution of fatal_handler
        return

atexit.register(fatal_handler)
您可以选择使用
getattr(sys,'last_value',None)
代替上述内容。如果
sys.last\u值
不可用,则返回
None

或者,如果只有一个函数需要在异常导致解释器关闭时运行,则可以使用:


当引发异常并取消捕获时,解释器调用异常信息。默认函数将给定的回溯和异常打印到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
导入atexit
导入系统
类LastException:
值=无
类型=无
trackback=无
@静力学方法
def例外挂钩(类型、值、回溯):
LastException.type=type
LastException.value=值
LastException.trackback=trackback
@静力学方法
def寄存器():
sys.excepthook=LastException.excepthook
def fatal_handler():
打印(“{0}{1}.”格式(LastException.type,LastException.value))
LastException.register()
atexit.register(致命的\u处理程序)
raise BaseException(“我是一个错误”)
#应该打印:我是一个错误

这种方法的问题是,只有在发生错误时才能引用
sys.last_值,而
atexit
函数并不总是如此。此外,我还需要一种异常类型,不仅是值(
sys.last_type
)。@ddnomad查找任何对象的类型都很简单,例如使用
type
。还有可用的
sys.last\u type
。但是我对避免
try/except
块检查这些值是否存在的其他可能方法感兴趣。@ddnomad
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