diff --git a/guide/src/conversions/traits.md b/guide/src/conversions/traits.md index 7d9975389f9..d09a684f549 100644 --- a/guide/src/conversions/traits.md +++ b/guide/src/conversions/traits.md @@ -171,8 +171,7 @@ enum RustyEnum { ``` If the input is neither a string nor an integer, the error message will be: -`"Can't convert to Union[str, int]"`, where `` is replaced by the type name and -`repr()` of the input object. +`"'' cannot be converted to 'Union[str, int]'"`. #### `#[derive(FromPyObject)]` Container Attributes - `pyo3(transparent)` diff --git a/pyo3-derive-backend/src/from_pyobject.rs b/pyo3-derive-backend/src/from_pyobject.rs index 8d8dc95660a..5ea0754d205 100644 --- a/pyo3-derive-backend/src/from_pyobject.rs +++ b/pyo3-derive-backend/src/from_pyobject.rs @@ -73,11 +73,7 @@ impl<'a> Enum<'a> { quote!( #(#var_extracts)* let type_name = obj.get_type().name(); - let from = obj - .repr() - .map(|s| format!("{} ({})", s.to_string_lossy(), type_name)) - .unwrap_or_else(|_| type_name.to_string()); - let err_msg = format!("Can't convert {} to {}", from, #error_names); + let err_msg = format!("'{}' object cannot be converted to '{}'", type_name, #error_names); Err(::pyo3::exceptions::PyTypeError::new_err(err_msg)) ) } diff --git a/src/err/mod.rs b/src/err/mod.rs index 294cbe9bcb8..461a1ad49ad 100644 --- a/src/err/mod.rs +++ b/src/err/mod.rs @@ -490,11 +490,8 @@ impl<'a> std::fmt::Display for PyDowncastError<'a> { fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { write!( f, - "Can't convert {} to {}", - self.from - .repr() - .map(|s| s.to_string_lossy()) - .unwrap_or_else(|_| self.from.get_type().name()), + "'{}' object cannot be converted to '{}'", + self.from.get_type().name(), self.to ) } diff --git a/tests/test_frompyobject.rs b/tests/test_frompyobject.rs index 98f2d2b9908..24a7322b01b 100644 --- a/tests/test_frompyobject.rs +++ b/tests/test_frompyobject.rs @@ -296,6 +296,6 @@ fn test_err_rename() { assert!(f.is_err()); assert_eq!( f.unwrap_err().to_string(), - "TypeError: Can't convert {} (dict) to Union[str, uint, int]" + "TypeError: 'dict' object cannot be converted to 'Union[str, uint, int]'" ); } diff --git a/tests/test_pyfunction.rs b/tests/test_pyfunction.rs index ae7ccb10a09..c97f4c39faa 100644 --- a/tests/test_pyfunction.rs +++ b/tests/test_pyfunction.rs @@ -21,7 +21,7 @@ fn test_conversion_error() { conversion_error, "conversion_error('100, -100)", PyTypeError, - "argument 'str_arg': Can't convert 100 to PyString" + "argument 'str_arg': 'int' object cannot be converted to 'PyString'" ); py_expect_exception!( py, @@ -49,14 +49,14 @@ fn test_conversion_error_signature() { conversion_error_signature, "conversion_error_signature('a string', 'another string')", PyTypeError, - "argument 'arg1': Can't convert 'a string' to PyTuple" + "argument 'arg1': 'str' object cannot be conterted to 'PyTuple'" ); py_expect_exception!( py, conversion_error_signature, "conversion_error_signature('100, -100)", PyTypeError, - "argument 'arg2': Can't convert '-100' to Option" + "argument 'arg2': 'int' object cannot be converted to 'Option'" ); }