我想編寫一個需要3個參數的python腳本。第一個參數是一個字符串,第二個參數是一個整數,第三個參數也是一個整數。Python:測試參數是否爲整數
我想在開始時進行條件檢查,以確保提供了正確數量的參數,並且在繼續之前它們是正確的類型。
我知道我們可以使用sys.argv來獲取參數列表,但我不知道如何測試一個參數是一個整數,然後將其分配給我的本地變量使用。
任何幫助將不勝感激。
我想編寫一個需要3個參數的python腳本。第一個參數是一個字符串,第二個參數是一個整數,第三個參數也是一個整數。Python:測試參數是否爲整數
我想在開始時進行條件檢查,以確保提供了正確數量的參數,並且在繼續之前它們是正確的類型。
我知道我們可以使用sys.argv來獲取參數列表,但我不知道如何測試一個參數是一個整數,然後將其分配給我的本地變量使用。
任何幫助將不勝感激。
如果您正在運行Python 2.7,請嘗試導入argparse。 Python 3.2也會使用它,它是解析參數的新的首選方法。
來自Python documentation page的這個示例代碼引入了一個ints列表,並找到傳遞的數字的最大值或總和。
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
>>> int('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'foo'
把它給int
。如果它不提高ValueError
那麼該字符串是一個整數。
Python的方法是嘗試,如果輸入不支持像
try:
sys.argv = sys.argv[:1]+map(int,sys.argv[1:])
except:
print 'Incorrect integers', sys.argv[1:]
+1也被稱爲EAFP:http://docs.python.org/glossary.html#term-eafp – 2010-11-19 19:50:01
我使用這個構造('TypeError'除外),但它沒有捕獲作爲'TypeError'的值' 1x'。我得到了'ValueError:無效的文字int()與基地10:'1x''。所以我會恭敬地編輯答案,以使'except'泛型。 – amphibient 2014-07-10 20:38:35
除python 3.4+應包含的'print'括號外,上面的'try'模塊可以用於python 3.4+嗎? ----我得到一個錯誤,說我不能連接'map'到列表。結果,測試總是跳轉到異常條款。乾杯, – Cbhihe 2017-01-16 10:32:14
操作,就可以把參數和嘗試...除了ValueError異常失敗。
如果您使用的是sys.argv,請調查argparse。
str.isdigit()可用於測試字符串是否僅由數字組成。
您可以使用type來確定Python中任何對象的類型。這適用於Python 2.6,我不知道它是否存在於其他版本中。
obvious_string = "This is a string."
if type(obvious_string) != int:
print "Bro, that is so _not_ an integer."
else:
print "Thanks for the integer, brotato chip."
更一般地說,您可以使用isinstance
來查看是否有東西是類的實例。
顯然,在腳本參數的情況下,一切是一個字符串,但如果你正在接受參數的函數/方法和要檢查他們,你可以使用:
def foo(bar):
if not isinstance(bar, int):
bar = int(bar)
# continue processing...
您也可以通過一個類的元組isinstance:
isinstance(bar, (int, float, decimal.Decimal))
不適用於這種情況,所有cmd行參數都以字符串形式接收。但我不知道可以通過實例傳遞圖斑,所以謝謝 - 我學到了。 – 2010-11-20 00:10:45
我是新來的Python,所以我張貼這不僅是爲了幫助,但也可以幫助:瞭解了爲什麼我的做法是評論/不是最好的一個,即是。
因此,與免責聲明我不是一個有經驗的蟒蛇開發,這裏是我會做什麼:
inp = sys.argv[x]
try:
input = int(inp)
except ValueError:
print("Input is not an integer")
什麼上面所做的是,它使得sys.argv中[X]以INP,然後嘗試將整數形式的inp輸入。如果沒有inp的整數形式,那麼inp不是一個數字,所以會引發ValueError異常。
我認爲這是你的主要問題,你知道如何檢查你是否有正確形式的所有三個參數。如果沒有,請告訴我們,我相信你會得到更多答案。 :)
您運行的是什麼版本的Python? – Zeke 2010-11-19 19:45:44