Struct pyo3::exceptions::PyIOError
source · [−]pub struct PyIOError(_);
Expand description
Represents Python’s IOError
exception.
Example: Raising IOError from Rust
This exception can be sent to Python code by converting it into a
PyErr
, where Python code can then catch it.
use pyo3::prelude::*;
use pyo3::exceptions::PyIOError;
#[pyfunction]
fn always_throws() -> PyResult<()> {
let message = "I'm IOError, and I was raised from Rust.";
Err(PyIOError::new_err(message))
}
Python code:
from my_module import always_throws
try:
always_throws()
except IOError as e:
print(f"Caught an exception: {e}")
Example: Catching IOError in Rust
use pyo3::prelude::*;
use pyo3::exceptions::PyIOError;
Python::with_gil(|py| {
let result: PyResult<()> = py.run("raise IOError", None, None);
let error_type = match result {
Ok(_) => "Not an error",
Err(error) if error.is_instance_of::<PyIOError>(py) => "IOError",
Err(_) => "Some other error",
};
assert_eq!(error_type, "IOError");
});
Implementations
Methods from Deref<Target = PyAny>
sourcepub fn downcast<T>(&self) -> Result<&T, PyDowncastError<'_>> where
for<'py> T: PyTryFrom<'py>,
pub fn downcast<T>(&self) -> Result<&T, PyDowncastError<'_>> where
for<'py> T: PyTryFrom<'py>,
Converts this PyAny
to a concrete Python type.
Examples
use pyo3::prelude::*;
use pyo3::types::{PyAny, PyDict, PyList};
Python::with_gil(|py| {
let dict = PyDict::new(py);
assert!(dict.is_instance_of::<PyAny>().unwrap());
let any: &PyAny = dict.as_ref();
assert!(any.downcast::<PyDict>().is_ok());
assert!(any.downcast::<PyList>().is_err());
});
sourcepub fn is<T: AsPyPointer>(&self, other: &T) -> bool
pub fn is<T: AsPyPointer>(&self, other: &T) -> bool
Returns whether self
and other
point to the same object. To compare
the equality of two objects (the ==
operator), use eq
.
This is equivalent to the Python expression self is other
.
sourcepub fn hasattr<N>(&self, attr_name: N) -> PyResult<bool> where
N: ToPyObject,
pub fn hasattr<N>(&self, attr_name: N) -> PyResult<bool> where
N: ToPyObject,
Determines whether this object has the given attribute.
This is equivalent to the Python expression hasattr(self, attr_name)
.
sourcepub fn getattr<N>(&self, attr_name: N) -> PyResult<&PyAny> where
N: ToPyObject,
pub fn getattr<N>(&self, attr_name: N) -> PyResult<&PyAny> where
N: ToPyObject,
Retrieves an attribute value.
This is equivalent to the Python expression self.attr_name
.
If calling this method becomes performance-critical, the intern!
macro can be used
to intern attr_name
, thereby avoiding repeated temporary allocations of Python strings.
Example: intern!
ing the attribute name
#[pyfunction]
fn version(sys: &PyModule) -> PyResult<&PyAny> {
sys.getattr(intern!(sys.py(), "version"))
}
sourcepub fn setattr<N, V>(&self, attr_name: N, value: V) -> PyResult<()> where
N: ToBorrowedObject,
V: ToBorrowedObject,
pub fn setattr<N, V>(&self, attr_name: N, value: V) -> PyResult<()> where
N: ToBorrowedObject,
V: ToBorrowedObject,
Sets an attribute value.
This is equivalent to the Python expression self.attr_name = value
.
If calling this method becomes performance-critical, the intern!
macro can be used
to intern attr_name
, thereby avoiding repeated temporary allocations of Python strings.
Example: intern!
ing the attribute name
#[pyfunction]
fn set_answer(ob: &PyAny) -> PyResult<()> {
ob.setattr(intern!(ob.py(), "answer"), 42)
}
sourcepub fn delattr<N>(&self, attr_name: N) -> PyResult<()> where
N: ToPyObject,
pub fn delattr<N>(&self, attr_name: N) -> PyResult<()> where
N: ToPyObject,
Deletes an attribute.
This is equivalent to the Python statement del self.attr_name
.
sourcepub fn compare<O>(&self, other: O) -> PyResult<Ordering> where
O: ToPyObject,
pub fn compare<O>(&self, other: O) -> PyResult<Ordering> where
O: ToPyObject,
Returns an Ordering
between self
and other
.
This is equivalent to the following Python code:
if self == other:
return Equal
elif a < b:
return Less
elif a > b:
return Greater
else:
raise TypeError("PyAny::compare(): All comparisons returned false")
Examples
use pyo3::prelude::*;
use pyo3::types::PyFloat;
use std::cmp::Ordering;
Python::with_gil(|py| -> PyResult<()> {
let a = PyFloat::new(py, 0_f64);
let b = PyFloat::new(py, 42_f64);
assert_eq!(a.compare(b)?, Ordering::Less);
Ok(())
})?;
It will return PyErr
for values that cannot be compared:
use pyo3::prelude::*;
use pyo3::types::{PyFloat, PyString};
Python::with_gil(|py| -> PyResult<()> {
let a = PyFloat::new(py, 0_f64);
let b = PyString::new(py, "zero");
assert!(a.compare(b).is_err());
Ok(())
})?;
sourcepub fn rich_compare<O>(&self, other: O, compare_op: CompareOp) -> PyResult<&PyAny> where
O: ToPyObject,
pub fn rich_compare<O>(&self, other: O, compare_op: CompareOp) -> PyResult<&PyAny> where
O: ToPyObject,
Tests whether two Python objects obey a given CompareOp
.
Depending on the value of compare_op
, this is equivalent to one of the
following Python expressions:
compare_op | Python expression |
---|---|
CompareOp::Eq | self == other |
CompareOp::Ne | self != other |
CompareOp::Lt | self < other |
CompareOp::Le | self <= other |
CompareOp::Gt | self > other |
CompareOp::Ge | self >= other |
Examples
use pyo3::class::basic::CompareOp;
use pyo3::prelude::*;
use pyo3::types::PyInt;
Python::with_gil(|py| -> PyResult<()> {
let a: &PyInt = 0_u8.into_py(py).into_ref(py).downcast()?;
let b: &PyInt = 42_u8.into_py(py).into_ref(py).downcast()?;
assert!(a.rich_compare(b, CompareOp::Le)?.is_true()?);
Ok(())
})?;
sourcepub fn lt<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
pub fn lt<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
Tests whether this object is less than another.
This is equivalent to the Python expression self < other
.
sourcepub fn le<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
pub fn le<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
Tests whether this object is less than or equal to another.
This is equivalent to the Python expression self <= other
.
sourcepub fn eq<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
pub fn eq<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
Tests whether this object is equal to another.
This is equivalent to the Python expression self == other
.
sourcepub fn ne<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
pub fn ne<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
Tests whether this object is not equal to another.
This is equivalent to the Python expression self != other
.
sourcepub fn gt<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
pub fn gt<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
Tests whether this object is greater than another.
This is equivalent to the Python expression self > other
.
sourcepub fn ge<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
pub fn ge<O>(&self, other: O) -> PyResult<bool> where
O: ToPyObject,
Tests whether this object is greater than or equal to another.
This is equivalent to the Python expression self >= other
.
sourcepub fn is_callable(&self) -> bool
pub fn is_callable(&self) -> bool
Determines whether this object appears callable.
This is equivalent to Python’s callable()
function.
Examples
use pyo3::prelude::*;
Python::with_gil(|py| -> PyResult<()> {
let builtins = PyModule::import(py, "builtins")?;
let print = builtins.getattr("print")?;
assert!(print.is_callable());
Ok(())
})?;
This is equivalent to the Python statement assert callable(print)
.
Note that unless an API needs to distinguish between callable and non-callable objects, there is no point in checking for callability. Instead, it is better to just do the call and handle potential exceptions.
sourcepub fn call(
&self,
args: impl IntoPy<Py<PyTuple>>,
kwargs: Option<&PyDict>
) -> PyResult<&PyAny>
pub fn call(
&self,
args: impl IntoPy<Py<PyTuple>>,
kwargs: Option<&PyDict>
) -> PyResult<&PyAny>
Calls the object.
This is equivalent to the Python expression self(*args, **kwargs)
.
sourcepub fn call0(&self) -> PyResult<&PyAny>
pub fn call0(&self) -> PyResult<&PyAny>
Calls the object without arguments.
This is equivalent to the Python expression self()
.
Examples
use pyo3::prelude::*;
Python::with_gil(|py| -> PyResult<()> {
let module = PyModule::import(py, "builtins")?;
let help = module.getattr("help")?;
help.call0()?;
Ok(())
})?;
This is equivalent to the Python expression help()
.
sourcepub fn call1(&self, args: impl IntoPy<Py<PyTuple>>) -> PyResult<&PyAny>
pub fn call1(&self, args: impl IntoPy<Py<PyTuple>>) -> PyResult<&PyAny>
Calls the object with only positional arguments.
This is equivalent to the Python expression self(*args)
.
Examples
use pyo3::prelude::*;
Python::with_gil(|py| -> PyResult<()> {
let module = PyModule::import(py, "operator")?;
let add = module.getattr("add")?;
let args = (1, 2);
let value = add.call1(args)?;
assert_eq!(value.extract::<i32>()?, 3);
Ok(())
})?;
This is equivalent to the following Python code:
from operator import add
value = add(1,2)
assert value == 3
sourcepub fn call_method(
&self,
name: &str,
args: impl IntoPy<Py<PyTuple>>,
kwargs: Option<&PyDict>
) -> PyResult<&PyAny>
pub fn call_method(
&self,
name: &str,
args: impl IntoPy<Py<PyTuple>>,
kwargs: Option<&PyDict>
) -> PyResult<&PyAny>
Calls a method on the object.
This is equivalent to the Python expression self.name(*args, **kwargs)
.
Examples
use pyo3::prelude::*;
use pyo3::types::{IntoPyDict, PyList};
Python::with_gil(|py| -> PyResult<()> {
let list = PyList::new(py, vec![3, 6, 5, 4, 7]);
let kwargs = vec![("reverse", true)].into_py_dict(py);
list.call_method("sort", (), Some(kwargs))?;
assert_eq!(list.extract::<Vec<i32>>()?, vec![7, 6, 5, 4, 3]);
Ok(())
})?;
This is equivalent to the following Python code:
my_list = [3, 6, 5, 4, 7]
my_list.sort(reverse = True)
assert my_list == [7, 6, 5, 4, 3]
sourcepub fn call_method0(&self, name: &str) -> PyResult<&PyAny>
pub fn call_method0(&self, name: &str) -> PyResult<&PyAny>
Calls a method on the object without arguments.
This is equivalent to the Python expression self.name()
.
Examples
use pyo3::prelude::*;
use pyo3::types::PyFloat;
use std::f64::consts::PI;
Python::with_gil(|py| -> PyResult<()> {
let pi = PyFloat::new(py, PI);
let ratio = pi.call_method0("as_integer_ratio")?;
let (a, b) = ratio.extract::<(u64, u64)>()?;
assert_eq!(a, 884_279_719_003_555);
assert_eq!(b, 281_474_976_710_656);
Ok(())
})?;
This is equivalent to the following Python code:
import math
a, b = math.pi.as_integer_ratio()
sourcepub fn call_method1(
&self,
name: &str,
args: impl IntoPy<Py<PyTuple>>
) -> PyResult<&PyAny>
pub fn call_method1(
&self,
name: &str,
args: impl IntoPy<Py<PyTuple>>
) -> PyResult<&PyAny>
Calls a method on the object with only positional arguments.
This is equivalent to the Python expression self.name(*args)
.
Examples
use pyo3::prelude::*;
use pyo3::types::PyList;
Python::with_gil(|py| -> PyResult<()> {
let list = PyList::new(py, vec![1, 3, 4]);
list.call_method1("insert", (1, 2))?;
assert_eq!(list.extract::<Vec<u8>>()?, [1, 2, 3, 4]);
Ok(())
})?;
This is equivalent to the following Python code:
list_ = [1,3,4]
list_.insert(1,2)
assert list_ == [1,2,3,4]
sourcepub fn is_true(&self) -> PyResult<bool>
pub fn is_true(&self) -> PyResult<bool>
Returns whether the object is considered to be true.
This is equivalent to the Python expression bool(self)
.
sourcepub fn is_none(&self) -> bool
pub fn is_none(&self) -> bool
Returns whether the object is considered to be None.
This is equivalent to the Python expression self is None
.
sourcepub fn is_empty(&self) -> PyResult<bool>
pub fn is_empty(&self) -> PyResult<bool>
Returns true if the sequence or mapping has a length of 0.
This is equivalent to the Python expression len(self) == 0
.
sourcepub fn get_item<K>(&self, key: K) -> PyResult<&PyAny> where
K: ToBorrowedObject,
pub fn get_item<K>(&self, key: K) -> PyResult<&PyAny> where
K: ToBorrowedObject,
Gets an item from the collection.
This is equivalent to the Python expression self[key]
.
sourcepub fn set_item<K, V>(&self, key: K, value: V) -> PyResult<()> where
K: ToBorrowedObject,
V: ToBorrowedObject,
pub fn set_item<K, V>(&self, key: K, value: V) -> PyResult<()> where
K: ToBorrowedObject,
V: ToBorrowedObject,
Sets a collection item value.
This is equivalent to the Python expression self[key] = value
.
sourcepub fn del_item<K>(&self, key: K) -> PyResult<()> where
K: ToBorrowedObject,
pub fn del_item<K>(&self, key: K) -> PyResult<()> where
K: ToBorrowedObject,
Deletes an item from the collection.
This is equivalent to the Python expression del self[key]
.
sourcepub fn iter(&self) -> PyResult<&PyIterator>
pub fn iter(&self) -> PyResult<&PyIterator>
Takes an object and returns an iterator for it.
This is typically a new iterator but if the argument is an iterator, this returns itself.
sourcepub fn get_type_ptr(&self) -> *mut PyTypeObject
pub fn get_type_ptr(&self) -> *mut PyTypeObject
Returns the Python type pointer for this object.
sourcepub fn cast_as<'a, D>(&'a self) -> Result<&'a D, PyDowncastError<'_>> where
D: PyTryFrom<'a>,
pub fn cast_as<'a, D>(&'a self) -> Result<&'a D, PyDowncastError<'_>> where
D: PyTryFrom<'a>,
Casts the PyObject to a concrete Python object type.
This can cast only to native Python types, not types implemented in Rust.
sourcepub fn extract<'a, D>(&'a self) -> PyResult<D> where
D: FromPyObject<'a>,
pub fn extract<'a, D>(&'a self) -> PyResult<D> where
D: FromPyObject<'a>,
Extracts some type from the Python object.
This is a wrapper function around FromPyObject::extract()
.
sourcepub fn get_refcnt(&self) -> isize
pub fn get_refcnt(&self) -> isize
Returns the reference count for the Python object.
sourcepub fn repr(&self) -> PyResult<&PyString>
pub fn repr(&self) -> PyResult<&PyString>
Computes the “repr” representation of self.
This is equivalent to the Python expression repr(self)
.
sourcepub fn str(&self) -> PyResult<&PyString>
pub fn str(&self) -> PyResult<&PyString>
Computes the “str” representation of self.
This is equivalent to the Python expression str(self)
.
sourcepub fn hash(&self) -> PyResult<isize>
pub fn hash(&self) -> PyResult<isize>
Retrieves the hash code of self.
This is equivalent to the Python expression hash(self)
.
sourcepub fn len(&self) -> PyResult<usize>
pub fn len(&self) -> PyResult<usize>
Returns the length of the sequence or mapping.
This is equivalent to the Python expression len(self)
.
sourcepub fn dir(&self) -> &PyList
pub fn dir(&self) -> &PyList
Returns the list of attributes of this object.
This is equivalent to the Python expression dir(self)
.
sourcepub fn is_instance(&self, typ: &PyType) -> PyResult<bool>
pub fn is_instance(&self, typ: &PyType) -> PyResult<bool>
Checks whether this object is an instance of type typ
.
This is equivalent to the Python expression isinstance(self, typ)
.
sourcepub fn is_instance_of<T: PyTypeObject>(&self) -> PyResult<bool>
pub fn is_instance_of<T: PyTypeObject>(&self) -> PyResult<bool>
Checks whether this object is an instance of type T
.
This is equivalent to the Python expression isinstance(self, T)
,
if the type T
is known at compile time.
sourcepub fn contains<V>(&self, value: V) -> PyResult<bool> where
V: ToBorrowedObject,
pub fn contains<V>(&self, value: V) -> PyResult<bool> where
V: ToBorrowedObject,
Determines if self contains value
.
This is equivalent to the Python expression value in self
.
Trait Implementations
sourceimpl AsPyPointer for PyIOError
impl AsPyPointer for PyIOError
sourceimpl Error for PyIOError
impl Error for PyIOError
sourcefn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
The lower-level source of this error, if any. Read more
1.0.0 · sourcefn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
sourceimpl<'py> FromPyObject<'py> for &'py PyIOError
impl<'py> FromPyObject<'py> for &'py PyIOError
sourceimpl PyNativeType for PyIOError
impl PyNativeType for PyIOError
sourceimpl PyTypeInfo for PyIOError
impl PyTypeInfo for PyIOError
type AsRefTarget = PyIOError
type AsRefTarget = PyIOError
Utility type to make Py::as_ref work.
sourcefn type_object_raw(_py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(_py: Python<'_>) -> *mut PyTypeObject
PyTypeObject instance for this type.
sourcefn is_type_of(object: &PyAny) -> bool
fn is_type_of(object: &PyAny) -> bool
Checks if object
is an instance of this type or a subclass of this type.
sourcefn is_exact_type_of(object: &PyAny) -> bool
fn is_exact_type_of(object: &PyAny) -> bool
Checks if object
is an instance of this type.
sourceimpl ToPyObject for PyIOError
impl ToPyObject for PyIOError
impl PyLayout<PyIOError> for PyBaseExceptionObject
impl PySizedLayout<PyIOError> for PyBaseExceptionObject
Auto Trait Implementations
impl !RefUnwindSafe for PyIOError
impl !Send for PyIOError
impl !Sync for PyIOError
impl Unpin for PyIOError
impl UnwindSafe for PyIOError
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<'p, T> FromPyPointer<'p> for T where
T: 'p + PyNativeType,
impl<'p, T> FromPyPointer<'p> for T where
T: 'p + PyNativeType,
sourceunsafe fn from_owned_ptr_or_opt(
py: Python<'p>,
ptr: *mut PyObject
) -> Option<&'p T>
unsafe fn from_owned_ptr_or_opt(
py: Python<'p>,
ptr: *mut PyObject
) -> Option<&'p T>
Convert from an arbitrary PyObject
. Read more
sourceunsafe fn from_borrowed_ptr_or_opt(
_py: Python<'p>,
ptr: *mut PyObject
) -> Option<&'p T>
unsafe fn from_borrowed_ptr_or_opt(
_py: Python<'p>,
ptr: *mut PyObject
) -> Option<&'p T>
Convert from an arbitrary borrowed PyObject
. Read more
sourceunsafe fn from_owned_ptr_or_panic(py: Python<'p>, ptr: *mut PyObject) -> &'p Self
unsafe fn from_owned_ptr_or_panic(py: Python<'p>, ptr: *mut PyObject) -> &'p Self
Convert from an arbitrary PyObject
or panic. Read more
sourceunsafe fn from_owned_ptr(py: Python<'p>, ptr: *mut PyObject) -> &'p Self
unsafe fn from_owned_ptr(py: Python<'p>, ptr: *mut PyObject) -> &'p Self
Convert from an arbitrary PyObject
or panic. Read more
sourceunsafe fn from_owned_ptr_or_err(
py: Python<'p>,
ptr: *mut PyObject
) -> PyResult<&'p Self>
unsafe fn from_owned_ptr_or_err(
py: Python<'p>,
ptr: *mut PyObject
) -> PyResult<&'p Self>
Convert from an arbitrary PyObject
. Read more
sourceunsafe fn from_borrowed_ptr_or_panic(
py: Python<'p>,
ptr: *mut PyObject
) -> &'p Self
unsafe fn from_borrowed_ptr_or_panic(
py: Python<'p>,
ptr: *mut PyObject
) -> &'p Self
Convert from an arbitrary borrowed PyObject
. Read more
sourceimpl<'v, T> PyTryFrom<'v> for T where
T: PyTypeInfo + PyNativeType,
impl<'v, T> PyTryFrom<'v> for T where
T: PyTypeInfo + PyNativeType,
sourcefn try_from<V>(value: V) -> Result<&'v T, PyDowncastError<'v>> where
V: Into<&'v PyAny>,
fn try_from<V>(value: V) -> Result<&'v T, PyDowncastError<'v>> where
V: Into<&'v PyAny>,
Cast from a concrete Python object type to PyObject.
sourcefn try_from_exact<V>(value: V) -> Result<&'v T, PyDowncastError<'v>> where
V: Into<&'v PyAny>,
fn try_from_exact<V>(value: V) -> Result<&'v T, PyDowncastError<'v>> where
V: Into<&'v PyAny>,
Cast from a concrete Python object type to PyObject. With exact type check.
sourceimpl<T> PyTypeObject for T where
T: PyTypeInfo,
impl<T> PyTypeObject for T where
T: PyTypeInfo,
sourcefn type_object(py: Python<'_>) -> &PyType
fn type_object(py: Python<'_>) -> &PyType
Returns the safe abstraction over the type object.