mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Add sys.exc_info
This commit is contained in:
1 parent
a0abe08c9a
commit
802acf7dd5
2 files changed
+23
-1
No files matched your search
@@ -38,3 +38,11 @@ sys.settrace(trc)
|
||||
demo(5)
|
||||
sys.settrace(None)
|
||||
|
||||
assert sys.exc_info() == (None, None, None)
|
||||
|
||||
try:
|
||||
1/0
|
||||
except ZeroDivisionError as exc:
|
||||
exc_info = sys.exc_info()
|
||||
assert exc_info[0] == type(exc) == ZeroDivisionError
|
||||
assert exc_info[1] == exc
|
||||
+15
-1
@@ -4,7 +4,9 @@ use std::{env, mem};
|
||||
use crate::frame::FrameRef;
|
||||
use crate::function::{OptionalArg, PyFuncArgs};
|
||||
use crate::obj::objstr::PyStringRef;
|
||||
use crate::pyobject::{IntoPyObject, ItemProtocol, PyClassImpl, PyContext, PyObjectRef, PyResult};
|
||||
use crate::pyobject::{
|
||||
IntoPyObject, ItemProtocol, PyClassImpl, PyContext, PyObjectRef, PyResult, TypeProtocol,
|
||||
};
|
||||
use crate::version;
|
||||
use crate::vm::{PySettings, VirtualMachine};
|
||||
|
||||
@@ -149,6 +151,17 @@ fn sys_intern(value: PyStringRef, _vm: &VirtualMachine) -> PyStringRef {
|
||||
value
|
||||
}
|
||||
|
||||
fn sys_exc_info(vm: &VirtualMachine) -> PyResult {
|
||||
Ok(vm.ctx.new_tuple(match vm.current_exception() {
|
||||
Some(exception) => vec![
|
||||
exception.class().into_object(),
|
||||
exception.clone(),
|
||||
vm.get_none(),
|
||||
],
|
||||
None => vec![vm.get_none(), vm.get_none(), vm.get_none()],
|
||||
}))
|
||||
}
|
||||
|
||||
pub fn make_module(vm: &VirtualMachine, module: PyObjectRef, builtins: PyObjectRef) {
|
||||
let ctx = &vm.ctx;
|
||||
|
||||
@@ -309,6 +322,7 @@ settrace() -- set the global debug tracing function
|
||||
"setprofile" => ctx.new_rustfunc(sys_setprofile),
|
||||
"settrace" => ctx.new_rustfunc(sys_settrace),
|
||||
"version" => vm.new_str(version::get_version()),
|
||||
"exc_info" => ctx.new_rustfunc(sys_exc_info),
|
||||
});
|
||||
|
||||
modules.set_item("sys", module.clone(), vm).unwrap();
|
||||
|
||||
Reference in new issue
Block a user