Expand Up
@@ -101,7 +101,9 @@ impl PyFunction {
if nargs > nexpected_args {
return Err(vm.new_type_error(format!(
"{}() takes {} positional arguments but {} were given",
&self.code.obj_name, nexpected_args, nargs
self.qualname(),
nexpected_args,
nargs
)));
}
}
Expand Down
Expand Up
@@ -132,25 +134,29 @@ impl PyFunction {
if let Some(pos) = argpos(code.posonlyarg_count..total_args, &name) {
let slot = &mut fastlocals[pos];
if slot.is_some() {
return Err(
vm.new_type_error(format!("Got multiple values for argument '{name}'"))
);
return Err(vm.new_type_error(format!(
"{}() got multiple values for argument '{}'",
self.qualname(),
name
)));
}
*slot = Some(value);
} else if let Some(kwargs) = kwargs.as_ref() {
kwargs.set_item(&name, value, vm)?;
} else if argpos(0..code.posonlyarg_count, &name).is_some() {
posonly_passed_as_kwarg.push(name);
} else {
return Err(
vm.new_type_error(format!("got an unexpected keyword argument '{name}'"))
);
return Err(vm.new_type_error(format!(
"{}() got an unexpected keyword argument '{}'",
self.qualname(),
name
)));
}
}
if !posonly_passed_as_kwarg.is_empty() {
return Err(vm.new_type_error(format!(
"{}() got some positional-only arguments passed as keyword arguments: '{}'",
&self.code.obj_name,
self.qualname(),
posonly_passed_as_kwarg.into_iter().format(", "),
)));
}
Expand Down
Expand Up
@@ -207,7 +213,7 @@ impl PyFunction {
return Err(vm.new_type_error(format!(
"{}() missing {} required positional argument{}: '{}{}{}'",
&self.code.obj_name,
self.qualname(),
missing_args_len,
if missing_args_len == 1 { "" } else { "s" },
missing.iter().join("', '"),
Expand Down