Skip to content

Commit e5d840b

Browse files
committed
Fix type() error messages
1 parent 53e27eb commit e5d840b

3 files changed

Lines changed: 9 additions & 3 deletions

File tree

Lib/test/test_types.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,8 +1168,6 @@ def __prepare__(mcls, name, bases):
11681168
with self.assertRaises(TypeError):
11691169
X = types.new_class("X", (int(), C))
11701170

1171-
# TODO: RUSTPYTHON
1172-
@unittest.expectedFailure
11731171
def test_one_argument_type(self):
11741172
expected_message = 'type.__new__() takes exactly 3 arguments (1 given)'
11751173

vm/src/exceptions.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ impl PyBaseException {
131131

132132
#[pymethod(name = "__str__")]
133133
fn str(&self, vm: &VirtualMachine) -> PyStringRef {
134-
let str_args = exception_args_as_string(vm, self.args(), false);
134+
let str_args = exception_args_as_string(vm, self.args(), true);
135135
match str_args.into_iter().exactly_one() {
136136
Err(i) if i.len() == 0 => PyString::from("").into_ref(vm),
137137
Ok(s) => s,

vm/src/obj/objtype.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,14 @@ impl PyClassRef {
261261
if args.args.len() != 3 {
262262
return Err(vm.new_type_error("type() takes 1 or 3 arguments".to_string()));
263263
}
264+
} else {
265+
if args.args.len() != 3 {
266+
let msg = format!(
267+
"type.__new__() takes exactly 3 arguments ({} given)",
268+
args.args.len()
269+
);
270+
return Err(vm.new_type_error(msg));
271+
}
264272
}
265273

266274
let (name, bases, dict): (PyStringRef, PyIterable<PyClassRef>, PyDictRef) =

0 commit comments

Comments
 (0)