在某次输出number时,遇到这个问题
ValueError: Exceeds the limit (4300) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit
大概可以翻译出来:
- 值错误:超出limit(4300)整型字符串的转化,使用
sys.set_int_max_str_digits()
去增加限制
输出一下sys.set_int_max_str_digits()
的帮助信息
print(help(sys.set_int_max_str_digits))
帮助内容如下:
Help on built-in function set_int_max_str_digits in module sys:
set_int_max_str_digits(maxdigits)
Set the maximum string digits limit for non-binary int<->str conversions.
None
这是一个控制非二进制整型与字符串互转最大数字限制的方法。
可以传入一个参数数字去控制。
没有谈到这个maxdigits
是怎样控制的,这个文档内容有点坑。
我们打印数字时,出现了limit(4300)
的错误,所以可以推断,这个数字应该是不可以超过4300个位置大小的。
所以尝试一下
print(10**4300)
他是报错的,然而当你尝试
print(10 * 4299)
这时候,他是正常输出的
所以maxdigits
应该就是这个可以控制输出数字位的一个参数。我们来调整成maxdigits==4400
,测试结果。
- 测试用例1
import sys
sys.set_int_max_str_digits(4400)
try:
print(10**4400)
except ValueError as e:
print('超出限制: ' + str(e))
- 测试用例2
import sys
sys.set_int_max_str_digits(4400)
try:
print(10**4399)
except ValueError as e:
print('超出限制: ' + str(e))
可以发现,测试用例1出现异常,测试用例2正常输出
# 测试用例1输出
超出限制: Exceeds the limit (4400) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit
# 测试用例2输出
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
由此,我们可以手动去设定maxdigits
去调整这个print输出前转化的限制,也有一个方法,可以让这个不受限制,那就是让maxdigits==0
只需要输入下面的代码即可:
import sys
sys.set_int_max_str_digits(0)