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

Python常遇到的錯誤和異常

 更新時間:2021年11月02日 10:04:48   作者:一碗周  
這篇文章主要介紹了Python常遇到的錯誤和異常,在日常的學(xué)習(xí)Python過程中,由于本身的編程水平受限,時不時的給我拋出一個異常讓我真的很難受;在學(xué)習(xí)的過程中發(fā)現(xiàn)Python中的錯誤分為語法錯誤和異常兩種。下面來看看下面文章錯誤異常的實例,需要的朋友可以參考一下

在日常的學(xué)習(xí)Python過程中,由于本身的編程水平受限,時不時的給我拋出一個異常讓我真的很難受;在學(xué)習(xí)的過程中發(fā)現(xiàn)Python中的錯誤分為語法錯誤和異常兩種。

1、語法錯誤

Python中的語法錯誤通常是最為明顯的錯誤了,由于不按照要求書寫代碼,往往就容易出現(xiàn)語法錯誤

示例代碼:

>>> print("hello world)
  File "<stdin>", line 1
    print("hello world)
                      ^
SyntaxError: EOL while scanning string literal
>>> while True print("hello world")
  File "<stdin>", line 1
    while True print("hello world")
                   ^
SyntaxError: invalid syntax

Python的語法解釋器會找出最先出現(xiàn)錯誤的位置,并在其下面標(biāo)記一個小小的箭頭

2、異常

什么是異常?異常就是一個事件,該事件會在程序的運行過程中發(fā)生,影響程序的正常執(zhí)行;因為Python中萬物皆對象,所以異常也是一個對象,就表示一個錯誤;一般情況下即使Python語法是正確的,在運行它的時候,也有可能發(fā)生錯誤,運行期檢測到的錯誤被稱為異常。

示例:

>>> print(1 / 0)   # 0 不能作為除數(shù),觸發(fā)異常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> print(my_name)  # # my_name 未定義,觸發(fā)異常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'my_name' is not defined
>>> print("5" + 5)  # # int 不能與 str 相加,觸發(fā)異常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

不同的異常就會提示不同的錯誤信息,錯誤信息的前面部分顯示了異常發(fā)生的上下文,并以調(diào)用棧的形式顯示具體信息。

3、異常處理

當(dāng)Python腳本發(fā)生異常時我們沒有及時捕獲處理它,程序會終止執(zhí)行。python中使用try/except語句就可以很好的來處理異常。

示例代碼:

try:
    print(my_name)  # 沒有定義my_nama變量,就會發(fā)生異常
    print("我是正常執(zhí)行的結(jié)果")  # 如果程序正常就會執(zhí)行此代碼
except NameError:
    print("如果發(fā)生異常,就會執(zhí)行我")  # 如果發(fā)生錯誤就會執(zhí)行此段代碼

執(zhí)行流程: 

執(zhí)行執(zhí)行 try 子句(在關(guān)鍵字 try 和關(guān)鍵字 except 之間的語句)
沒有找到變量,引發(fā)NameError錯誤
異常類型正好和except后面的語句相符合,應(yīng)的 except 子句將被執(zhí)行

注意:如果異常與之不符合,還是會拋出異常

如果想要一個except子句可以同時處理多個異常,這些異常將被放在一個括號里成為一個元組,

例如:

try:
    pass
except (RuntimeError, TypeError, NameError):
    pass

一個try語句也可以包含多個except子句,分別來處理不同的特定的異常。最多只有一個分支會被執(zhí)行。

最后一個except子句可以忽略異常的名稱,它將被當(dāng)作通配符使用??梢酝ㄟ^raise將異常拋出

示例代碼;

while True:
    try:
        a = int(input("請輸入被除數(shù):"))
        b = int(input("請輸入被除數(shù):"))
        c = a / b
        print("結(jié)果為:", c)
        break  # 跳出循環(huán)
    except ValueError:
        print("輸入的不是一個數(shù)字,請重新輸入")
    except:
        print("未知異常")
        raise  # 如果不是ValueError,會打印上一條語句并拋出異常

執(zhí)行流程:

4、try/except...else

try/except 語句還有一個可選的 else 子句,想要使用這個子句,就必須放在所有的 except 子句之后。

else 子句將在 try 子句沒有發(fā)生任何異常的時候執(zhí)行。

執(zhí)行流程:

示例代碼:

while True:
    try:
        a = int(input("請輸入被除數(shù):"))
        b = int(input("請輸入被除數(shù):"))
    except ValueError:
        print("輸入的不是一個數(shù)字,請重新輸入")
    except ZeroDivisionError:
        print("被除數(shù)為0")
    else:
        c = a / b
        print("結(jié)果為:", c)
        print('計算完畢')
        break

這里出現(xiàn)了一個小問題,如果在一個死循環(huán)的語句中,try中有break關(guān)鍵字,就不會執(zhí)行else語句

使用 else 子句比把所有的語句都放在 try 子句里面要好,這樣可以避免一些意想不到,而 except 又無法捕獲的異常。

5、try-finally 語句

try-finally 語句無論是否發(fā)生異常都將執(zhí)行最后的代碼。

while True:
    try:
        a = int(input("請輸入被除數(shù):"))
        b = int(input("請輸入被除數(shù):"))
    except ValueError:
        print("輸入的不是一個數(shù)字,請重新輸入")
    except ZeroDivisionError:
        print("被除數(shù)為0")
    else:
        c = a / b
        print("結(jié)果為:", c)
        print('計算完畢')
        break
    finally:
        print("程序執(zhí)行完畢")  # 這句話,無論異常是否發(fā)生都會執(zhí)行

6、拋出異常

Python 使用 raise 語句拋出一個指定的異常

語法結(jié)構(gòu):

raise [Exception [, args [, traceback]]]

Exception是異常的類型(例如,NameError)參數(shù)標(biāo)準(zhǔn)異常中任一種

args 是自已提供的異常參數(shù)(可選)。

tracebackargs 是跟蹤異常對象(可選)。

示例代碼:

x = int(input())  # 獲取一個數(shù)字
if x == 0:
    # 如果等于0就拋出Exception異常 
    raise Exception('x等于0。')  # Exception: x等于0。

之前的代碼有個bug,被除數(shù)為0時就直接拋出異常,一個通過這種方法解決

while True:
    try:
        a = int(input("請輸入被除數(shù):"))
        b = int(input("請輸入被除數(shù):"))
        if b == 0:
            raise ZeroDivisionError('被除數(shù)等于0。')
    except ValueError as e:  # 將異常信息傳遞給e
        print(e)  # 將異常信息打印出來
        print("輸入的不是一個數(shù)字,請重新輸入")
    except ZeroDivisionError:
        print("被除數(shù)為0")
    else:
        c = a / b
        print("結(jié)果為:", c)
        print('計算完畢')
        break
    finally:
        print("程序執(zhí)行完畢")  # 這句話,無論異常是否發(fā)生都會執(zhí)行

dxcept...as...可以將異常信息傳遞出來

7、用戶自定義異常

可以通過創(chuàng)建一個新的異常類來擁有自己的異常。異常類繼承自 Exception 類,可以直接繼承,或者間接繼承

示例代碼:

# 自定義一個異常類
class MyError(Exception):  # 異常類繼承自 Exception 類
    """
    自己定義的一個異常類
    """

    def __init__(self, message):
        self.message = message


raise MyError("自己定義的一個異常類")

到此這篇關(guān)于Python常遇到的錯誤和異常的文章就介紹到這了,更多相關(guān)Python錯誤和異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中將字典改造為對象的方法

    python中將字典改造為對象的方法

    這篇文章主要介紹了python中將字典改造為對象的方法,在實際項目中,當(dāng)使用json模塊加載一個深度很深的字典類型的json文件時,使用字典的訪問方式,將會出現(xiàn)很多中括號,即不直觀也不美觀,可以將這個字典轉(zhuǎn)化為對象,使得可以用.的方式訪問,需要的朋友可以參考下
    2023-11-11
  • 十個Python中常用的pip命令總結(jié)

    十個Python中常用的pip命令總結(jié)

    相信對于大多數(shù)熟悉Python的人來說,一定都聽說并且使用過pip這個工具,但是對它的了解可能還不一定是非常的透徹,今天小編就來為大家介紹10個使用pip的小技巧,相信對大家以后管理和使用Python當(dāng)中的標(biāo)準(zhǔn)庫會有幫助
    2022-07-07
  • pycharm中使用anaconda部署python環(huán)境的方法步驟

    pycharm中使用anaconda部署python環(huán)境的方法步驟

    這篇文章主要介紹了pycharm中使用anaconda部署python環(huán)境的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • python?moviepy?的用法入門篇

    python?moviepy?的用法入門篇

    MoviePy(全套文件)是一個用于視頻編輯Python庫:切割、拼接、標(biāo)題插入,視頻合成(即非線性編輯),視頻處理和自定義效果的創(chuàng)造,本文給大家介紹python?moviepy?的用法詳解,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Django權(quán)限控制的使用

    Django權(quán)限控制的使用

    這篇文章主要介紹了Django權(quán)限控制的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python?groupby函數(shù)實現(xiàn)分組選取最大值與最小值

    python?groupby函數(shù)實現(xiàn)分組選取最大值與最小值

    這篇文章主要介紹了python?groupby函數(shù)實現(xiàn)分組選取最大值與最小值,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 利用Python判斷你的密碼難度等級

    利用Python判斷你的密碼難度等級

    很多網(wǎng)站在用戶注冊賬號的時候為了保證賬戶的安全,都會自動檢測用戶密碼的強度并給出提醒讓用戶設(shè)置一個相對安全的密碼。這篇文章主要給大家介紹了關(guān)于利用Python判斷你的密碼難度等級,需要的朋友可以參考下
    2021-06-06
  • 詳解Python之Scrapy爬蟲教程NBA球員數(shù)據(jù)存放到Mysql數(shù)據(jù)庫

    詳解Python之Scrapy爬蟲教程NBA球員數(shù)據(jù)存放到Mysql數(shù)據(jù)庫

    這篇文章主要介紹了詳解Python之Scrapy爬蟲教程NBA球員數(shù)據(jù)存放到Mysql數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 30秒輕松實現(xiàn)TensorFlow物體檢測

    30秒輕松實現(xiàn)TensorFlow物體檢測

    這篇文章主要為大家詳細(xì)介紹了30秒輕松實現(xiàn)TensorFlow物體檢測,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 用python實現(xiàn)PDF解密打印文件

    用python實現(xiàn)PDF解密打印文件

    大家好,本篇文章主要講的是用python實現(xiàn)PDF解密打印文件,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02

最新評論