首頁 > 軟體

Python異常之常見的Bug型別解決方法

2022-03-18 13:02:04

一、粗心導致的語法錯誤SyntaxError

1、input輸入報錯

age=input('請輸入你的年齡:')
if age>=18:
    print("成年人做事需要。。。。")

報錯:TypeError: '>=' not supported between instances of 'str' and 'int'

因為input輸入返回值是字串所以無法與整數型別數位比較

解決辦法:input前面加上int(),把input輸入的數轉為整數型別,就可以比較資料了

age=int(input('請輸入你的年齡:'))
if age>=18:
    print("成年人做事需要。。。。")

2、迴圈語句報錯

while i<10:
    print (i)

迴圈語句報錯:錯誤原因,沒有迴圈變數初始值,也沒有迴圈變數的遞增,然後使用括號不規範,使用的中文的括號

解決方法: 新增虛幻變數的初始值,新增迴圈變數的遞增,將不規範的括號改正(使用中文括號)

迴圈要有三要素:

 i=1   #迴圈變數的起始值
while i < 10:   #迴圈的條件語句
    print(i)
    i+=1   #變數的遞增

3、賦值報錯

for i in range(3):
    uname =input("請輸入使用者名稱:")
    upwd=input("請輸入密碼:")
    if uname="admin" and upwd=pwd:
        print("登陸成功!")
    else
        print("輸入有誤")
else
    print("對不起,三次均輸入錯誤")

報錯:SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

錯誤多處:=是賦值,==才是比較,if語句比較時使用了=賦值語句,所以出錯,還有就是未定義比較的內容admin然後就是else語句後面未加:

解決方法:  在if語句比較處將=換成==,因為=是賦值,==是比較,還有就是在迴圈開始前加上用來比較的變數,然後再else語句後加上冒號:

admin="hua"
pwd="123456"
for i in range(3):
    uname =input("請輸入使用者名稱:")
    upwd=input("請輸入密碼:")
    if uname==admin and upwd==pwd:
        print("登陸成功!")
    else:
        print("輸入有誤")
else:
    print("對不起,三次均輸入錯誤")

粗心導致錯誤的自查寶典:

  • 1、漏了末尾的冒號,如if語句,迴圈語句,else子句等。
  • 2、縮排錯誤,該縮排的沒縮排,不該縮排的卻縮排了。
  • 3、把英文符號寫成中文符號沒比如說:引號,冒號,括號
  • 4、字串拼接的時候,把字串和數位拼接在一起
  • 5、沒有定義變數,比如說while的迴圈條件變數
  • 6、"=="比較運運算元和"="賦值運運算元的混用

二、知識不熟練導致的錯誤Bug

1、索引越界問題 IndexError

lst=[11,22,33,44]
print(lst[4])

錯誤:IndexError: list index out of range 索引越界,雖然有四個數,但索引不是從一開始算,正索引是從0開始算,負索引是從-1開始算

解決辦法: 改寫為正確的索引

lst=[11,22,33,44]
print(lst[3])

2、append()函數的使用報錯

lst=[]
lst=append("A","B","C")
print((lst))

報錯:NameError: name 'append' is not defined 錯誤的方法使用append()函數

解決方法:掌握正確的使用函數的技巧,使用函數不是使用=呼叫,而是使用.去呼叫函數,並且append()函數一次只能增加一個元素

lst=[]
lst.append("A")
lst.append("B")
lst.append("C")
print((lst))  #返回值['A', 'B', 'C']

知識點掌握不熟練的導致的錯誤,唯一的解決方法就是練練練

三、思路不清晰導致的問題解決方案

1、使用print()函數

將出錯的程式碼用print輸出,將有問題的程式碼註釋掉,一步一步的偵錯,最後將想要的結果輸出

2、使用"#"暫時登出部分程式碼 

解決方法:多加練習,掌握基礎知識

四、被動掉坑

程式程式碼邏輯沒有錯,知識因為使用者錯誤操作或者一些"例外情況"而導致的程式崩潰

被動掉坑問題的解決方案:

python提供了例外處理機制,可以在異常出現時即使補貨,然後內部消化,讓程式繼續執行
異常捕獲處理 try:   except  xxx:語句   xxx為錯誤型別

try:用於放入容易出錯的程式碼
except用於處理異常並正常輸出後續程式碼,可以使程式碼不會報錯結束,可以出現多個except語句來處理多種異常型別。

使用方式:

try:

將容易出錯的程式碼放入其中
易出錯程式碼
易出錯程式碼

except  可能出現的型別:

print(捕獲異常後用於提示的話語)

except  可能出現的型別:

print(捕獲異常後用於提示的話語)

一般程式碼:

a=int(input("請輸入第一個整數:"))
b=int(input("請輸入第二個整數:"))
result=a/b
print("結果為:",result)

極容易出現報錯,導致終止後面的程式,比如整除不能輸入0,不能輸入英文,只要輸入了,那麼就會報錯結束程式

所以就需要使用到try:  except

try:    #將易錯程式碼放進去
    a=int(input("請輸入第一個整數:"))
    b=int(input("請輸入第二個整數:"))
    result=a/b
    print("結果為:",result)
except ZeroDivisionError:   #不允許被0除的異常(異常型別在程式報錯時會出現,將這種異常型別放入後,出現該異常就會自動處理,而不會報錯終止程式)
    print("對不起,除數不允許為0")  #出現該異常後的提示
except ValueError:    #輸入異常,int括號裡的input只能輸入數位串,不能輸入字串
    print("只能輸入數位串")   #出現該異常後的提示
print("程式結束")    #程式可能出現的異常都用except寫出來了,所以不管出現什麼異常,後面的程式一樣執行

到此這篇關於Python異常之常見的Bug型別解決方法的文章就介紹到這了,更多相關Python異常解決內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com