2013-10-09 24 views
-3
import sys 

a =int(sys.argv[1]) 

print "\nArguments -->",a , sys.argv[2] 

print "\nNo of Argu ", len(sys.argv), "\n" 

print str(sys.argv) 

命令窗口輸出我給是:的Python:無效字面對於int()與底座10: 'A'

python testfunction.py a sf df sf 

Whenevr第一個參數取爲 'A',它顯示了錯誤 - >

invalid literal for int() with base 10: 'a' 

新手到python。 請提供如何處理這種不嘗試除

而且

當我不給螞蟻的說法,我應該處理的解決方案,也

命令窗口outout了我所賜:

蟒蛇testfunction的.py

錯誤:IndexError:列表索引超出範圍

+5

你知道'a'不是一個整數,不是嗎?那麼你期望該計劃做什麼? – Matthias

+0

我怎樣才能處理,沒有嘗試除外?請幫助我 –

+3

爲什麼你害怕嘗試/除了?你可以用if/else來改變它) – alexvassel

回答

5

我不太清楚,如果你知道自己在做什麼,但讓我澄清這個給你:

a =int(sys.argv[1]) 

你希望你的第一個參數是整數類型。這顯然並非如此,因爲你打電話給你的腳本使用以下參數:

a sf df sf 

的Python改掉你的第一個參數轉換爲整數。哪個失敗。

一個簡單的簡單的解決將是確保第一個參數是一個整數:

if sys.argv[1].isdigit(): 
    a = int(sys.argv[1]) 
else: 
    print "First argument is not a digit" 
    sys.exit(1) 

或者與除塊一試用來包圍這個(這也是我來)

try: 
    a = int(sys.argv[1]) 
except ValueError: 
    print "Stupid user, please enter a number" 
    sys.exit(1) 
+0

當我不提供命令行參數時,我也應該處理它我的命令行iput我給的是:python testfunction.py錯誤:IndexError:list index超出範圍 –

2

你正在嘗試a =int(sys.argv[1])這是從您的命令行"a" - 這是不能轉換爲一個整數使用基數10 - 即它不是數字0..9!

爲了解決這個問題,而無需使用try..except你必須檢查在sys.argv中[1]所有的人物都是以「9」 爲字符範圍「0」調用INT之前( )。

+0

我想要處理沒有嘗試除了?請幫我在這 –

+0

嚴格來說,字符串中也可以有空格和減號。總的來說,在''try''中調用''int()''比手動執行所有檢查更容易。 – fjarri

+0

我應該如何檢查,我不想在調用int之前檢查? –

0

沒有try/except

if sys.argv[1].isdigit(): 
    a = int(sys.argv[1]) 
else: 
    #do smth if arg is not a number 
    pass 

是否只有正整數工作。

+0

>>> argv =' - 33' >>> argv.isdigit() False#-33是一個有效的int。 –

+0

我明白這一點。你的回答比我的好) – alexvassel

+0

我試圖避免爲他們做些功課! –

1

int()接受基底作爲第二個可選參數。

a = int(sys.argv[1], 16) # == 10 

你仍然必須處理所有其他情況下,用戶可以提供的東西是完全不是一個整數例外。

+0

當他們嘗試以100作爲第一個參數運行時,他們會不會感到驚訝! –

+0

我的確在這裏猜測他想要十六進制,這可能不是正確的:) – kichik

相關問題