找回密碼
 註冊
搜索
查看: 34|回復: 0

[教學] print輸出int,錯誤 ValueError: Exceeds the limit (4300) for integer string conve

[複製鏈接]
發表於 8 小時前 | 顯示全部樓層 |閱讀模式
Push to Facebook
print輸出int,錯誤 ValueError: Exceeds the limit (4300) for integer string conversion;use sys.set_int_max

在某次輸出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()的幫助訊息

  1. print(help(sys.set_int_max_str_digits))
複製代碼


幫助內容如下:
Help on built-in function set_int_max_str_digits in module sys:
  1. set_int_max_str_digits(maxdigits)
複製代碼

    Set the maximum string digits limit for non-binary int<->str conversions.


這是一個控制非二進制整數與字串互轉最大數字限制的方法。
可以傳入一個參數數字去控制。
沒有談到這個maxdigits是怎麼控制的,這個文件內容有點坑。

我們印數字時,出現了limit(4300)的錯誤,所以可以推斷,這個數字應該是不可以超過4300個位置大小的。

所以嘗試一下

  1. print(10**4300)
複製代碼


他是報錯的,然而當你嘗試

  1. print(10 * 4299)
複製代碼


這時候,他是正常輸出的

所以maxdigits應該就是這個可以控制輸出數位的一個參數。我們來調整成maxdigits==4400,測試結果。

測試用例1
  1. import sys
  2. sys.set_int_max_str_digits(4400)

  3. try:
  4.     print(10**4400)
  5. except ValueError as e:
  6.     print('超出限制: ' + str(e))
複製代碼


測試用例2
  1. import sys
  2. sys.set_int_max_str_digits(4400)

  3. try:
  4.     print(10**4399)
  5. except ValueError as e:
  6.     print('超出限制: ' + str(e))
複製代碼


可以發現,測試案例1出現異常,測試案例2正常輸出

  1. # 测试用例1输出
  2. 超出限制: Exceeds the limit (4400) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit

  3. # 测试用例2输出
  4. 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
複製代碼


由此,我們可以手動去設定maxdigits去調整這個print輸出前轉換的限制,也有一個方法,可以讓這個不受限制,就是讓maxdigits==0
只需要輸入下面的程式碼:

  1. import sys
  2. sys.set_int_max_str_digits(0)
複製代碼



您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

Archiver|手機版|小黑屋|TShopping

GMT+8, 2025-9-16 23:12 , Processed in 0.018462 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表