什么是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