def custom_int(s, base=10):
"""
将字符串按照指定进制转换为整数
参数:
s -- 要转换的字符串
base -- 进制数,默认值为10,取值范围为2到36
返回:
转换后的整数
异常:
ValueError -- 如果字符串不符合指定进制规则或base值不在有效范围内
"""
if not isinstance(s, str):
raise ValueError("第一个参数必须是字符串")
if not isinstance(base, int) or base < 2 or base > 36:
raise ValueError("base必须是2到36之间的整数")
try:
return int(s, base)
except ValueError as e:
raise ValueError(f"字符串 '{s}' 不符合 {base} 进制规则: {e}")
实现思路
- 参数类型检查:首先检查传入的
s
是否为字符串类型,base
是否为整数类型且在2到36的范围内。如果不满足条件,抛出 ValueError
异常并给出相应错误提示。
- 使用内置
int()
函数:Python 内置的 int()
函数本身支持将字符串按照指定进制转换为整数,直接调用 int(s, base)
。
- 异常处理:如果
int(s, base)
调用过程中引发 ValueError
异常,捕获该异常并重新抛出一个更详细的 ValueError
异常,说明字符串不符合指定进制规则。
使用到的Python基本类型函数及其原理
isinstance()
:用于判断一个对象是否为指定的类型。例如 isinstance(s, str)
判断 s
是否为字符串类型,isinstance(base, int)
判断 base
是否为整数类型。其原理是检查对象的类型信息与指定类型是否匹配。
int()
:将字符串按照指定的进制转换为整数。int(s, base)
中,s
是要转换的字符串,base
是进制数。它会根据 base
的值解析字符串,例如 base=2
时,字符串只能由 0
和 1
组成;base=16
时,字符串可以包含 0-9
和 a-f
(或 A-F
)。如果字符串格式不符合指定进制要求,会抛出 ValueError
异常。