1. 異常一般式
>>
>
while
true:.
..try:..
. x =
int(
input
("please enter a number: "))
...break..
.except valueerror:..
.print
("oops! that was no valid number. try again...").
..
except 可以多行
2. except 子句的元組
...
except
(runtimeerror, typeerror, nameerror):.
..pass
異常類
class
b(exception)
:pass
class
c(b)
:pass
class
d(c)
:pass
for cls in
[b, c, d]
:try
:raise cls(
)except d:
print
("d"
)except c:
print
("c"
)except b:
print
("b"
)
如果 except 子句被顛倒(把 except b 放到第乙個),它將列印 b,b,b — 即第乙個匹配的 except 子句被觸發。
最後的 except 子句可以省略異常名,以用作萬用字元。但請謹慎使用,因為以這種方式很容易掩蓋真正的程式設計錯誤!它還可用於列印錯誤訊息,然後重新引發異常(同樣允許呼叫者處理異常)
import sys
try:
f =open
('myfile.txt'
) s = f.readline(
) i =
int(s.strip())
except oserror as err:
print
("os error: "
.format
(err)
)except valueerror:
print
("could not convert data to an integer."
)except
:print
("unexpected error:"
, sys.exc_info()[
0])raise
3. else 子句
else 子句必須放在所有的 except 子句後面。作為在try 子句不引發異常時必須執行的**
for arg in sys.ar**[1:
]:try:
f =open
(arg,
'r')
except oserror:
print
('cannot open'
, arg)
else
:print
(arg,
'has'
,len
(f.readlines())
,'lines'
) f.close(
)
4. 異常引數
except 子句可以在異常名稱後面指定乙個變數。這個變數和乙個異常例項繫結,它的引數儲存在 instance.args 中。為了方便起見,異常例項定義了str() ,因此可以直接列印引數而無需引用 .args 。也可以在丟擲之前首先例項化異常,並根據需要向其新增任何屬性。
>>
>
try:..
.raise exception(
'spam'
,'eggs').
..except exception as inst:..
.print
(type
(inst)
)# the exception instance..
.print
(inst.args)
# arguments stored in .args..
.print
(inst)
# __str__ allows args to be printed directly,..
.# but may be overridden in exception subclasses..
. x, y = inst.args # unpack args..
.print
('x ='
, x)..
.print
('y ='
, y)..
.<
class
'exception'
>
('spam'
,'eggs')(
'spam'
,'eggs'
)x = spam
y = eggs
如果異常有引數,則它們將作為未處理異常的訊息的最後一部分列印。
>>
>
defthis_fails()
:... x =1/
0...
>>
>
try:..
. this_fails().
..except zerodivisionerror as err:..
.print
('handling run-time error:'
, err)..
.handling run-time error: division by zero
4. 丟擲異常
raise 語句允許程式設計師強制發生指定的異常。
>>
>
raise nameerror(
'hithere'
)traceback (most recent call last)
: file ""
, line 1,in
nameerror: hithere
raise 唯一的引數就是要丟擲的異常。這個引數必須是乙個異常例項或者是乙個異常類(派生自 exception 的類)。如果傳遞的是乙個異常類,它將通過呼叫沒有引數的建構函式來隱式例項化。
raise valueerror # shorthand for 'raise valueerror()'
如果你需要確定是否引發了異常但不打算處理它,則可以使用更簡單的 raise 語句形式重新引發異常
>>
>
try:..
.raise nameerror(
'hithere').
..except nameerror:..
.print
('an exception flew by!').
..raise..
.an exception flew by!
traceback (most recent call last)
: file ""
, line 2,in
nameerror: hithere
未完結。。。。。。。。。。
————blueicex 2020/07/19 18:45 [email protected]
python錯誤和異常
1 語法錯誤 syntax errors 語法錯誤,也就是解析時錯誤。當我們寫出不符合python語法 時,在解析時會報syntaxerror,並且會顯示出錯的那一行,並用小箭頭知名指明最早探測到錯誤的位置。如 while ture file line 1 while ture syntaxerro...
Python 錯誤和異常
for i in range 10 print i for i in range 10 syntaxerror invalid syntax python的語法分析器完成,檢測到錯誤所在的檔案和行號,以向上箭頭標記錯誤位置,最後顯示錯誤型別 當程式檢測到乙個錯誤,直譯器就無法繼續執行下去,丟擲異常,...
Python錯誤和異常
語法錯誤是指python編譯器在編譯時出現的錯誤,語法分析器會指出出錯的一行並在最新出現問題的位置標記乙個小箭頭及錯誤提示 while true print hello world file haha.py line 1 while true syntaxerror invalid syntax 函...