python學習之路之int()奇怪的報錯


今天閑來無事看了下python基礎知識,當學到數據類型轉換的int()方法時候。發現了這么一個有意思的事情,算是IDE或是解釋器的一個小BUG。(具體原因暫不明,留待以后查找問題)

先講下環境

  • 操作系統:    windows10
  • python版本:3.6.5
  • IDE環境:     pycharm edu 2018.1 x64
  • 解釋器:       CPython

然后 int()方法的作用

函數 說明
int(x[,base]) j將x轉換為一個整數

 

閑話少說上代碼:

情況1:

# -*- coding:utf-8 -*-
>>>age=input()
>>>print(int(age))
15

輸出正常

 

情況2:

# -*- coding:utf-8 -*-
>>>print(int(15.6))
15                  #使用int()轉換的時候,會強制省略小數點后面的數字

輸出正常

 

情況3:

# -*- coding:utf-8 -*-
age = input("請輸入年齡:")
if int(age)>=18:
    print("恭喜你已經成年了")
else:
    print("你還需要在成長")

如果用戶輸入的是正常的不帶小數點的整數字符串,那么轉換輸出沒有問題。

當用戶輸入浮點型字符串后,開始數據類型轉換時,出現了這么奇怪的報錯:

# -*- coding:utf-8 -*-
age = input("請輸入年齡:")
if int(age)>=18:      #這里的age是字符串類型,但是在條件表達式中是作為數字對待的 print("恭喜你已經成年了")
else:
    print("你還需要在成長")

#執行以上參數后,輸入值15.6,出現以下報錯(不光是輸入帶小數點的數字字符串,只要是非整數以外的字符,均會報錯)
Traceback (most recent call last):
  File "C:/pythonstudy/startpython/day1.py", line 6, in <module>
    if int(age)>=18:
ValueError: invalid literal for int() with base 10: '15.6'     #值錯誤:int()以10為底的無效文字:'15.6'

可是情況1輸入小數點的數字轉換的時候是沒有問題的。問題出在哪呢?

 

通過百度找到了解決方法

# # -*- coding:utf-8 -*-import re #引入正則模塊
age = input("請輸入年齡:")
totalCount = re.sub("\D", "", age)         #使用正則的sub方法過濾掉輸入的字符串中age帶的非數字字符和空的值。 if int(totalCount)>=18:
    print("恭喜你已經成年了")
else:
    print("你還需要在成長")

當輸入帶有小數點的字符串的時候,不會再出現值錯誤的報錯。(但是亂輸入非數字符號還是會報錯)。但是打印totalConunt,你會發現這種方式不光去掉了字符串age中帶的非數字字符和空值,連小數點就去掉了。

 

但是通過如下代碼:

# -*- coding:utf-8 -*-
age = int(float(input("請輸入年齡:")))
if int(age)>=18:
    print("恭喜你已經成年了")
else:
    print("你還需要在成長")

你會發現輸入小數點又可以了。又不會報錯了。

初步推測,int()函數能轉換純整數數字的字符串,不帶小數點的(帶小數點就會報錯。int(方法應該是認為小數點不屬於純整數范疇))。float()能轉換純整數數字字符串或帶小數點的純浮點數字符串。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM