1、語法錯誤(syntax errors)
語法錯誤,也就是解析時錯誤。當我們寫出不符合python語法**時,在解析時會報syntaxerror,並且會顯示出錯的那一行,並用小箭頭知名指明最早探測到錯誤的位置。如:
2、異常(exceptios)>>> while ture
file "", line 1
while ture
^syntaxerror: invalid syntax
即使語句或表示式在語法上是正確的,但在嘗試執行時也可能發生錯誤,執行時錯誤就叫做異常(exceptions)。異常並不是致命的問題,因為我們可以在程式中對異常進行處理。
上面顯示了三種exceptions的型別:zerodivisionerror,nameerror,typeerror,它們都是內建異常的名稱。標準異常的名字就是內建的識別符號(但並不是關鍵字)。>>> 10 * (1 / 0)
traceback (most recent call last):
file "", line
1, in
zerodivisionerror: division by
zero
>>> 2 + x
traceback (most recent call last):
file "", line
1, in
nameerror: name 'x' is not defined
>>> 2 + '2'
traceback (most recent call last):
file "", line
1, in
typeerror: unsupported operand type(s) for +: 'int'
and'str'
我們可以使用try…except…語句來處理異常。try語句塊中是要執行的語句,except語句塊中是異常處理語句。乙個try語句可以有多個except語句,用以指定不同的異常,但至多只有乙個會被執行。
上面這段**,當輸入a(非數字)時,將丟擲valueerror;try:
x = int(input('please input a integer:'))
if30 / x >5:
print("hello world!")
except valueerror:
print('that was no valid number .try again...')
except zerodivisionerror:
print("the divior can not be zero .try again...")
except:
print("handling other exceptions...")
當輸入0時,將丟擲zerodivisionerror;
當輸入其他型別的異常時,將執行except:
後的處理語句。
如果在try執行時 ,出現了乙個異常,該語句剩下部分將被跳過。並且如果該異常的型別匹配到了except後面的異常名,那麼該except後的語句將被執行。注意如果except後面沒有跟異常名,表示匹配任何型別的異常,except:必須放在最後。
乙個except可以同時包括多個異常名,但需要用括號括起來,如:
try…except…語句還可以有乙個可選的else語句,else語句必須放在所有except語句之後,當沒有異常發生的時候,else從句將被執行。>>> try:
... a = input()
... except (runtime,typeerror,nameerror):
... print("exception")
raise允許程式設計師強制地丟擲乙個特定的異常,例如:
raise丟擲的異常必須是乙個異常例項或類(派生自exception的類)>>> raise nameerror
#丟擲異常
traceback (most recent call last):
file
"", line 1, in
nameerror
try語句有另一種可選的>>> 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
finally
從句,用於自定義一些掃尾清理工作。
與 else 從句的區別在於: else 語句只在沒有異常發生的情況下執行,而 finally 語句則不管異常發生與否都會執行。準確的說,finally 語句總是在退出 try 語句前被執行,無論是正常退出、異常退出,還是通過break、continue、return退出。
例子(來自實驗樓)>>> try:
... raise keyboardinterrupt
... finally:
... print('goodbye, world!')
...
goodbye, world!
traceback (most recent call last):
file "", line 2, in
keyboardinterrupt
目標請在 /home/shiyanlou/code寫出乙個 minutestohours.py 指令碼檔案,實現乙個函式 hours(),將使用者輸入的 分鐘數 轉化為 小時數和分鐘數,並要求小時數盡量大。講結果以 xx h, xx m 的形式列印出來。(注意列印格式中的空格)
要求
**如下使用者能夠通過命令列輸入分鐘數,程式需要列印出相應的小時數和分鐘數
如果使用者輸入的是乙個負值,程式需要報錯 valueerror
需要進行 try...except 操作來控制異常。如果異常,在螢幕上列印列印出 valueerror: input number cannot be negative 提示使用者輸入的值有誤
#!/usr/bin/env python3
import sys
defhours
(m):
h,m = divmod(m,60) #得到乙個商和餘數的元組
return
'{} h, {} m'.format(h,m)
try:
m = int(sys.argv[1]) #傳入的第乙個引數
if m < 0:
raise valueerror
else:
print(hours(m))
except valueerror:
print('valueerror: input number cannot be negative' )
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 函...
Python 錯誤和異常
在編寫 的時候,先不管出於什麼原因,在執行階段,可能都看到過一些錯誤的資訊。這些資訊當中 至少 有兩種可區分的錯誤 語法錯誤和異常。語法錯誤也叫解析錯誤,這可能在學習編碼中最容易遇到的錯誤 while true print hello world file line 1 while true pri...