什么是 Python 替代 PHP 的 error_get_last() 函数?
What is Python replacement for PHP's error_get_last() function?
我需要实现一个 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 获得必要的功能,我会很高兴。
我会为此使用 sys.last_value
:
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)
代替上面的 EAFP approach。它 returns None
如果 sys.last_value
不可用。
或者,如果只有一个函数您想要 运行 只有当解释器关闭是由异常引起时,您可以使用 sys.excepthook
:
import sys
def fatal_handler(type, value, traceback):
e = value
sys.excepthook = fatal_handler
当引发异常但未捕获时,解释器调用 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
我需要实现一个 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 获得必要的功能,我会很高兴。
我会为此使用 sys.last_value
:
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)
代替上面的 EAFP approach。它 returns None
如果 sys.last_value
不可用。
或者,如果只有一个函数您想要 运行 只有当解释器关闭是由异常引起时,您可以使用 sys.excepthook
:
import sys
def fatal_handler(type, value, traceback):
e = value
sys.excepthook = fatal_handler
当引发异常但未捕获时,解释器调用 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