欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pycharm的debug調(diào)試以及異常,Python中錯誤的處理過程

 更新時間:2024年01月29日 09:59:20   作者:Make_magic  
這篇文章主要介紹了pycharm的debug調(diào)試以及異常,Python中錯誤的處理過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

第一次寫關(guān)于pycharm的debug調(diào)試以及python代碼運行報錯處理的帖子,錯誤地方請大家指出。

第一個部分:pycharm的debug調(diào)試

作為一個非科班出生的學(xué)生,平時看代碼的時候特別的難懂,這時候?qū)Υadebug單步調(diào)試可以很好的看代碼的具體信息。讓我們能夠更加清晰的理解代碼具體傳遞過程。

debug:我們在pycharm窗口的右上角可以看見這個小蟲子(七星瓢蟲)圖標。

同時我們也可以右擊鼠標,這時候也可以發(fā)現(xiàn)這個小蟲子。

當然如果代碼沒有錯誤,點擊小蟲子和run(上圖最左邊的三角符號)運行是一樣的效果。

如果我們想讓它在某一行停下來,我們可以在某一行打斷點(就在某一行旁邊點擊鼠標左鍵),如下圖:這時候debug,代碼運行從第一行到第12行,而第13行代碼停止運行。

而Special Variables為特殊變量:在這里會顯示運行結(jié)果,如下圖。

Special Variables上邊的結(jié)果為正常變量(如上圖)

下邊重點介紹幾個按鈕: 

1.step over(F8) 單步調(diào)試

在當前這個腳本安裝代碼順序逐行運行,點擊一下,就會在Variables顯示運行結(jié)果,如下圖但我按鍵盤F8鍵,藍色行由17行跳轉(zhuǎn)到18行,Variables和17行后邊都會顯示詳細信息。

2.Step Into(F7) 單步調(diào)試

在單步執(zhí)行時,遇到子函數(shù)就進入并且繼續(xù)單步執(zhí)行,有的會跳到源代碼里面去執(zhí)行。

如下圖,我將第13行打上斷點,當我按鍵盤鍵F7的時候直接跳入定義的函數(shù)中去,這時候藍色行在迪行,我們可以看到第6行的詳細信息。

3.Step Into My Code(Alt+Shift+F7快捷鍵)

在單步執(zhí)行時,遇到子函數(shù)就進入并且繼續(xù)單步執(zhí)行,不會進入到源碼中。所以Step Into My Code就我而言功能和Step Into比較相似,一般而言用處不大。 

4.Step Out(Shift+F8快捷鍵)

當我們運行代碼進入了一個函數(shù)體中,看了幾行代碼懂這個函數(shù)體是什么意思了,我想要跳出當前函數(shù)體,返回調(diào)用此函數(shù)的代碼行,即使用此功能即可。這個功能還是比較方便。 

5.Run to Cursor(Alt+F9)

如果我們打了多個斷點的時候,我們按鍵盤F9鍵,直接從當前斷點運行到下一個斷點。如果只打了一個斷點,直接運行到腳本結(jié)束。

當然我覺得用的最多的應(yīng)該是Step Over(F7)和Step Into(F8)這兩個鍵,這就是我對pycharm的debug調(diào)試功能的理解,有什么講錯了的地方請大家指出,謝謝!

第二部分:異常,Python 中錯誤的處理方式

這里邊所用到的代碼小例子是看b站視頻所講解的小例子。

當程序在運行時 Python 解釋器遇到到一個錯誤,這時候就會停止程序的執(zhí)行,并且提示一些錯誤信息,這就是異常。 

1.簡單的捕獲異常語法

我們可以增加 try(嘗試) 來捕獲異常。

捕獲異常最簡單的語法格式:

try:
    嘗試執(zhí)行的代碼
except:
    出現(xiàn)錯誤的處理

try except 語句的執(zhí)行流程如下:

我們執(zhí)行 try (嘗試)里面的代碼塊,這個時候是不確定這個代碼能否正常執(zhí)行。執(zhí)行異常時系統(tǒng)會自動生成一個異常類型,并將該異常交給 Python 解釋器。

Python 解釋器收到異常對象,會通過except塊來處理這個異常。

如果Python 解釋器找不到處理異常的 except 塊程序運行終止,Python 解釋器也將退出。

小例子:

try:
    # 提示用戶輸入一個數(shù)字
    num = int(input("請輸入數(shù)字:"))
except:
    print("請輸入正確的數(shù)字")

這時候運行代碼,輸入正確數(shù)字9,會出現(xiàn)運行正常并程序運行結(jié)束

如果這個時候我輸入一個漢字或者一個字母,這個時候會通過except塊來處理這個異常。

2.錯誤類型捕獲

在程序執(zhí)行時遇到不同類型的異常,做出不同的響應(yīng),這個時候我們需要捕獲錯誤類型是什么。

語法格式:

try:
    # 嘗試執(zhí)行的代碼
    pass
except 錯誤類型1:
    # 針對錯誤類型1,對應(yīng)的代碼處理
    pass
except (錯誤類型2, 錯誤類型3):
    # 針對錯誤類型2 和 3,對應(yīng)的代碼處理
    pass
except Exception as result:
    print("未知錯誤 %s" % result)

我們可以用一個 except 塊可以同時處理多種異常。

小例子:

try:
    num = int(input("請輸入整數(shù):"))
    result = 8 / num
    print(result)
except ValueError:
    print("請輸入正確的整數(shù)")
except ZeroDivisionError:
    print("除 0 錯誤")

當我運行程序,輸入hah,結(jié)果如下:

當我運行程序,輸入0,結(jié)果如下:

顯然不同類型的錯誤,運行后通過except塊來處理這個異常的類型也不一樣。

當然在開發(fā)時,要預(yù)判到所有可能出現(xiàn)的錯誤,還是有一定難度的。這時候可以使用捕獲未知錯誤,語法如下:

except Exception as result:
    print("未知錯誤 %s" % result)

3.異常捕獲的完整語法

當然為了能夠處理復(fù)雜的異常情況,完整的異常語法如下:

try:
    # 嘗試執(zhí)行的代碼
    pass
except 錯誤類型1:
    # 針對錯誤類型1,對應(yīng)的代碼處理
    pass
except 錯誤類型2:
    # 針對錯誤類型2,對應(yīng)的代碼處理
    pass
except (錯誤類型3, 錯誤類型4):
    # 針對錯誤類型3 和 4,對應(yīng)的代碼處理
    pass
except Exception as result:
    # 打印錯誤信息
    print(result)
else:
    # 沒有異常才會執(zhí)行的代碼
    pass
finally:
    # 無論是否有異常,都會執(zhí)行的代碼
    print("無論是否有異常,都會執(zhí)行的代碼")
  • else:只有在沒有異常時才會執(zhí)行的代碼。
  • finally: 無論是否有異常,都會執(zhí)行的代碼。
try:
    num = int(input("請輸入整數(shù):"))
    result = 8 / num
    print(result)
except ValueError:
    print("請輸入正確的整數(shù)")
except ZeroDivisionError:
    print("除 0 錯誤")
except Exception as result:
    print("未知錯誤 %s" % result)
else:
    print("正常執(zhí)行")
finally:
    print("執(zhí)行完成,但是不保證正確")

4.異常的傳遞

當函數(shù)/方法執(zhí)行出現(xiàn)異常,會將異常傳遞給函數(shù)/方法的調(diào)用一方,如果傳遞到主程序,仍然沒有異常處理,程序才會被終止。在開發(fā)中,可以在主函數(shù)中增加異常捕獲,而在主函數(shù)中調(diào)用的其他函數(shù),只要出現(xiàn)異常,都會傳遞到主函數(shù)的異常捕獲中,這樣就不需要在代碼中,增加大量的異常捕獲,能夠保證代碼的整潔。

小例子:

  • 定義函數(shù) demo1() 提示用戶輸入一個整數(shù)并且返回
  • 定義函數(shù) demo2() 調(diào)用 demo1()
  • 在主程序中調(diào)用 demo2()
def demo1():
    return int(input("請輸入一個整數(shù):"))

def demo2():
    return demo1()

try:
    print(demo2())
except ValueError:
    print("請輸入正確的整數(shù)")
except Exception as result:
    print("未知錯誤 %s" % result)

我嘗試在三個地方輸入:

def demo1():
    # try:
     return int(input("請輸入一個整數(shù):"))
    # except:
    #     pass

def demo2():
    # try:
        return demo1()
    # except:
    #     pass

# try:
demo2()
    # print(demo2())
# except ValueError:
#     print("請輸入正確的整數(shù)")
# except Exception as result:
#     print("未知錯誤 %s" % result)

看錯三步法

1.看line后面的數(shù)字,表示在哪一行犯錯了,快速定位

2.看列出的這行代碼,準確定位

3.報錯原因:TypeError這一行就是闡釋為什么錯了

其實我認為在最后一句報錯那個地方去處理就行。

但是額,對于底下有很多行報紅,這里我也是不太清楚,只能按照異常傳遞試,如果說錯了麻煩大家指出我的錯誤,并且希望大家也說說多行報紅該怎么去看這種錯誤,謝謝大家。

異常分類

  • BaseException 所有異常的基類
  • Exception 常見錯誤的基類
  • ArithmeticError 所有數(shù)值計算錯誤的基類
  • Warning 警告的基類
  • AssertError 斷言語句(assert)失敗
  • AttributeError 嘗試訪問未知的對象屬性
  • DeprecattionWarning 關(guān)于被棄用的特征的警告
  • EOFError 用戶輸入文件末尾標志EOF(Ctrl+d)
  • FloattingPointError 浮點計算錯誤
  • FutureWarning 關(guān)于構(gòu)造將來語義會有改變的警告
  • GeneratorExit generator.close()方法被調(diào)用的時候
  • ImportError 導(dǎo)入模塊失敗的時候
  • IndexError 索引超出序列的范圍
  • KeyError 字典中查找一個不存在的關(guān)鍵字
  • KeyboardInterrupt 用戶輸入中斷鍵(Ctrl+c)
  • MemoryError 內(nèi)存溢出(可通過刪除對象釋放內(nèi)存)
  • NamerError 嘗試訪問一個不存在的變量
  • NotImplementedError 尚未實現(xiàn)的方法
  • OSError 操作系統(tǒng)產(chǎn)生的異常(例如打開一個不存在的文件)
  • OverflowError 數(shù)值運算超出最大限制
  • OverflowWarning 舊的關(guān)于自動提升為長整型(long)的警告
  • PendingDeprecationWarning 關(guān)于特征會被遺棄的警告
  • ReferenceError 弱引用(weak reference)試圖訪問一個已經(jīng)被垃圾回收機制回收了的對象
  • RuntimeError 一般的運行時錯誤
  • RuntimeWarning 可疑的運行行為(runtime behavior)的警告
  • StopIteration 迭代器沒有更多的值
  • SyntaxError Python的語法錯誤
  • SyntaxWarning 可疑的語法的警告
  • IndentationError 縮進錯誤
  • TabError Tab和空格混合使用
  • SystemError Python編譯器系統(tǒng)錯誤
  • SystemExit Python編譯器進程被關(guān)閉
  • TypeError 不同類型間的無效操作
  • UnboundLocalError 訪問一個未初始化的本地變量(NameError的子類)
  • UnicodeError Unicode相關(guān)的錯誤(ValueError的子類)
  • UnicodeEncodeError Unicode編碼時的錯誤(UnicodeError的子類)
  • UnicodeDecodeError Unicode解碼時的錯誤(UnicodeError的子類)
  • UserWarning 用戶代碼生成的警告
  • ValueError 傳入無效的參數(shù)
  • ZeroDivisionError 除數(shù)為零

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Python安裝pyecharts所遇的問題及解決方法

    基于Python安裝pyecharts所遇的問題及解決方法

    今天小編就為大家分享一篇基于Python安裝pyecharts所遇的問題及解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python中selenium_webdriver下拉框操作指南

    Python中selenium_webdriver下拉框操作指南

    selenium 雖然過了這么多年,但是到目前為止依然是比較流行的自動化框架了,下面這篇文章主要給大家介紹了關(guān)于Python中selenium_webdriver下拉框操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • 使用Python批量刪除MySQL數(shù)據(jù)庫的全部外鍵

    使用Python批量刪除MySQL數(shù)據(jù)庫的全部外鍵

    這篇文章主要為大家詳細介紹了如何使用Python批量刪除MySQL數(shù)據(jù)庫的全部外鍵,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習一下
    2024-04-04
  • 使用python編寫udp協(xié)議的ping程序方法

    使用python編寫udp協(xié)議的ping程序方法

    下面小編就為大家分享一篇使用python編寫udp協(xié)議的ping程序方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python for循環(huán)及基礎(chǔ)用法詳解

    Python for循環(huán)及基礎(chǔ)用法詳解

    這篇文章為大家介紹python for 循環(huán),它常用于遍歷字符串、列表、元組、字典、集合等序列類型,逐個獲取序列中的各個元素
    2019-11-11
  • Python實現(xiàn)歷史記錄功能(實際案例)

    Python實現(xiàn)歷史記錄功能(實際案例)

    很多應(yīng)用程序都有瀏覽用戶的歷史記錄的功能,瀏覽器可以查看最近訪問過的網(wǎng)頁,現(xiàn)在我們制作了一個簡單的猜數(shù)字的小游戲,添加歷史記錄功能,顯示用戶最近猜過的數(shù)字,如何實現(xiàn)呢?跟隨小編一起看看吧
    2022-04-04
  • 基于PyScreeze實現(xiàn)截屏和定位功能

    基于PyScreeze實現(xiàn)截屏和定位功能

    PyScreeze 是一個開源的 Python 屏幕截圖模塊,適用于 Python 2 和 Python 3,該項目由開源技術(shù)專家 Al Sweigart 創(chuàng)建,旨在提供一個簡單而強大的工具,用于屏幕截圖以及圖像識別功能,本文就給大家介紹了基于PyScreeze實現(xiàn)截屏和定位功能,需要的朋友可以參考下
    2025-04-04
  • Scrapy爬蟲實例講解_?;ňW(wǎng)

    Scrapy爬蟲實例講解_校花網(wǎng)

    下面小編就為大家?guī)硪黄猄crapy爬蟲實例講解_?;ňW(wǎng)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Python實現(xiàn)簡單的猜單詞小游戲

    Python實現(xiàn)簡單的猜單詞小游戲

    這篇文章主要為大家詳細介紹了Python實現(xiàn)簡單的猜單詞小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • python3對接mysql數(shù)據(jù)庫實例詳解

    python3對接mysql數(shù)據(jù)庫實例詳解

    這篇文章主要介紹了python3對接mysql數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-04-04

最新評論