[英]Try/except statement not catching ValueError when converting string to int in python 3
[英]Converting String to Int using try/except in Python
所以我很困惑如何使用 try/except function 將字符串轉換為 int。有誰知道一個簡單的 function 如何做到這一點? 我覺得我對字符串和整數還是有點模糊。 我非常有信心整數與數字有關。 字符串...不是那么多。
在使用 try/except 塊時,具體說明您試圖捕獲的異常是很重要的。
string = "abcd"
try:
string_int = int(string)
print(string_int)
except ValueError:
# Handle the exception
print('Please enter an integer')
Try/Excepts 非常強大,因為如果某些事情可能會以多種不同的方式失敗,您可以指定您希望程序如何在每種失敗情況下做出反應。
這里是:
s = "123"
try:
i = int(s)
except ValueError as verr:
pass # do job to handle: s does not contain anything convertible to int
except Exception as ex:
pass # do job to handle: Exception occurred while converting to int
首先, try
/ except
不是函數,而是語句。
要將字符串( 或任何其他可以轉換的類型) 轉換為 Python 中的整數,只需調用int()
內置函數。 如果失敗, int()
將raise
ValueError
並且您應該特別抓住這一點:
>>> for value in '12345', 67890, 3.14, 42L, 0b010101, 0xFE, 'Not convertible':
... try:
... print '%s as an int is %d' % (str(value), int(value))
... except ValueError as ex:
... print '"%s" cannot be converted to an int: %s' % (value, ex)
...
12345 as an int is 12345
67890 as an int is 67890
3.14 as an int is 3
42 as an int is 42
21 as an int is 21
254 as an int is 254
"Not convertible" cannot be converted to an int: invalid literal for int() with base 10: 'Not convertible'
語法略有變化:
>>> for value in '12345', 67890, 3.14, 42, 0b010101, 0xFE, 'Not convertible':
... try:
... print('%s as an int is %d' % (str(value), int(value)))
... except ValueError as ex:
... print('"%s" cannot be converted to an int: %s' % (value, ex))
...
12345 as an int is 12345
67890 as an int is 67890
3.14 as an int is 3
42 as an int is 42
21 as an int is 21
254 as an int is 254
"Not convertible" cannot be converted to an int: invalid literal for int() with base 10: 'Not convertible'
在很多情況下,我們希望從用戶那里獲得一個整數值。 用戶可能會插入應該被警告的非整數值,並且應該提示他們重試。 以下代碼段可用於從用戶處獲取整數值,並繼續提示用戶插入整數,直到輸入有效整數。
def get_integer_value():
user_value = input("Enter an integer: ")
try:
return int(user_value)
except ValueError:
print(f"{user_value} is not a valid integer. Please try again.")
return get_integer_value()
if __name__ == "__main__":
print(f"You have inserted: {get_integer_value()}")
輸出:
Enter an integer: asd
asd is not a valid integer. Please try again.
Enter an integer: 32
You have inserted: 32
你可以做 :
try :
string_integer = int(string)
except ValueError :
print("This string doesn't contain an integer")
不幸的是,官方文檔並沒有詳細說明int()
可以引發的異常; 但是,當您使用int()
時,它基本上會引發兩個異常:如果值不是數字或字符串(或字節或字節數組),則為TypeError
;如果值不是真正的 map 為數字,則為ValueError
。
你應該管理兩者,像這樣:
try:
int_value = int(value)
except (TypeError, ValueError):
print('Not an integer')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.