我不想做的所有異常:獲取,可能導致從int(some_variable)
try:
pid = int(a_variable)
except StandardError as e:
pass
所以,問題是什麼是搞清楚所有可能的異常的方法可能導致int(a_variable)
。很明顯,TypeError
和ValueError
可以發生,但我怎麼工作出什麼可以結果?
我不想做的所有異常:獲取,可能導致從int(some_variable)
try:
pid = int(a_variable)
except StandardError as e:
pass
所以,問題是什麼是搞清楚所有可能的異常的方法可能導致int(a_variable)
。很明顯,TypeError
和ValueError
可以發生,但我怎麼工作出什麼可以結果?
您可以選擇適合您traceback
模塊的方法,並用日誌對象結合起來(見logging
模塊):
import traceback
import sys
import logging
try:
pid = int(sys.argv[1])
except Exception as e:
logging.error(traceback.print_exc())
執行的例子:
你能趕上一個IndexError
異常與python begueradj.py
[email protected]:~/Desktop$ python begueradj.py
Traceback (most recent call last):
File "tester.py", line 6, in <module>
pid = int(sys.argv[1])
IndexError: list index out of range
您可以捕獲ValueError
例外情況^ h python begueradj.py +
:
[email protected]:~/Desktop$ python begueradj.py +
Traceback (most recent call last):
File "tester.py", line 6, in <module>
pid = int(sys.argv[1])
ValueError: invalid literal for int() with base 10: '+'
我認爲這個答案實際上是回答提出的問題。 – user3610360
我只看到,可以通過代碼會產生兩種可能的異常:
pid = int(sys.argv[1])
ValueError
如果sys.argv[1]
字符串是沒有有效的整數表示(如「1」或「1.5」)IndexError
如果sys.argv
列表不包含至少兩個元素,因爲腳本是在沒有命令行參數的情況下執行的。有沒有機會(假設你不重寫建宏)你的代碼可以提高一個,因爲TypeError
sys.argv
始終是一個字符串列表。期。
你可能最終也連得NameError
如果你忘了在你的代碼上面這一行,以及在import sys
,但沒有運行時錯誤,但一個編程錯誤。
什麼可能發生的是因爲用戶在準確毫秒按下按Ctrl + Ç,而你的命令運行解釋提出了一個不相關的異常像KeyboardInterrupt
- 但通常不想在當地捕到那些人。
正如您在您的評論是說,在你的問題的代碼行只是一個例子,如果我們推廣這int(x)
(與x
是文字或變量,但沒有什麼是能夠引發例外本身,像方法調用或操作),你還可以得到這些異常:
TypeError
如果參數既不是數字類型(整型,長整型,浮點,複雜的,布爾),也不是一個字符串類型(str,bytes,bytearray)或其他任何對象g __int__
方法或(自3.4)__index__
方法。
NameError
如果您使用變量名作爲輸入,但尚未在此上下文中定義輸入。但是,除非您使用eval
或exec
,並且讓用戶輸入變量名稱(不鼓勵!),否則這種情況不太可能發生。由於這是一個純粹的編程錯誤,並且沒有運行時錯誤,並且您的IDE將突出顯示未聲明的變量名稱的使用,所以檢查此錯誤通常無用。
最好的答案比我的,但你忘記了第一種情況下1 /'AttributeError'的可能情況(如果'SYS'綁定到沒有'ARGV'屬性的東西],並且2 /只是任何可能的內建或自定義異常,如果'x'具有'__int __(self)'的破壞實現 - 但都屬於「編程錯誤」類別,就我而言,我們不希望發現編程錯誤無論如何。 –
@falsetru看到更新的最後一句,對不起 – LetMeSOThat4U
你想知道一切,可以發生或如何處理其他異常不是'TypeError'和'ValueError'可能的例外? – Aurel
你會如何處理TypeError? 'sys.argv'被定義爲字符串列表,並且字符串轉換爲int時不會引發TypeErrors。 –