首頁 > 後端開發 > Python教學 > python中異常有哪些? python中異常的詳細介紹

python中異常有哪些? python中異常的詳細介紹

不言
發布: 2018-09-26 15:54:31
原創
2852 人瀏覽過

本篇文章帶給大家的內容是關於python中異常有哪些? python中異常的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

python的異常分為兩種,1)、語法錯誤,在python解釋器的語法檢測中不通過不能運行代碼    2)、異常,python程序運行期檢測到的錯誤被稱為異常。在沒有做異常處理時,將終止程序並提示異常信息,如:①字符串轉換為數字時的類型轉換異常,②文件讀取時的文件不存在異常,③網絡鏈接時主機不可達異常·· ·等。當Python腳本發生異常時我們需要捕獲處理它,否則程式會終止執行。 畢竟誰也不希望用著的程式突然的就崩了

#1、語法錯誤

python的文法錯誤是許多初學者常遇到的問題,這類錯誤比較低階,只要多敲幾遍程式碼就可以減少這樣的錯誤

##

>>> if Trur
  File "<stdin>", line 1
    if Trur
          ^
SyntaxError: invalid syntax
>>> print("as"))
  File "<stdin>", line 1
    print("as"))
               ^
SyntaxError: invalid syntax
登入後複製

如:出現這樣的錯誤就是語法錯誤,第1行結尾if語句缺少":",第6行結尾多了")"

2、異常

1)運行期偵測到的錯誤稱為異常,python的語法偵測無法檢查這樣的錯誤。

>>> int("aa")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: &#39;aa&#39;
>>> f = open("aaa.txt","r")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: &#39;aaa.txt&#39;
登入後複製

其中第1行,第5行都是出現異常的地方,看一下異常的輸出訊息,如下圖

2)python的標準異常類別

BaseException 為所有異常的基類,Exception 為常規錯誤的基類

#其它python的異常類,就不再一一的述說,可以百度查看

3、異常處理

為了提高程式的健全性,不讓程式出現異常時出現崩潰的情況,在必要時需要進行例外處理

1)try-except:語句

①、最簡單的例外處理語句如下,當try的語句區塊中有異常出現時,下邊的語句將不再執行(第3行),異常被except捕獲,執行except中的語句塊後繼續向下執行程序(如第6行)。註:except後邊不跟異常的類型,預設捕捉所有的異常

try:
    int("aaa")
    print("---aaa---")
except:
    print("出现异常-->英文字母不能转换为数字")
print("----------")
# 输出结果
出现异常-->英文字母不能转换为数字
----------
登入後複製

#②、多分支異常,當我們需要捕獲不同的異常時可以用多個except來實現,需要取得異常的資訊可透過as 變數名稱得到異常的對象,如第7行

try:
    nu = int("100")
    print("转换后的值nu:", nu)
    i = 1 / 0
except ValueError:
    print("出现异常-->英文字母不能转换为数字")
except ZeroDivisionError as e:  # 通过 as 变量名 获取异常的对象
    print("出现异常-->除数不能为零")
    print("异常的提示信息-->", e)
except:
    pass
print("----------")


# 输出结果
转换后的值nu: 100
出现异常-->除数不能为零
异常的提示信息--> division by zero
----------
登入後複製

③、當我們需要將多個例外按相同的處理方式可以使用  except (ValueError, [ZeropisionError [, NameError]]):

try:
    i = 1 / 0
    nu = int("aa")
except (ValueError, ZeroDivisionError) as e:
    print(e)
except:
    pass
print("----------")


# 输出结果
division by zero
----------
登入後複製

2)try-except-else-finally 語句

#①、當try-except-else-finally中出現了finally語句,不管是否出現異常finally語句區塊中的語句一定會執行,而else中的語句只有不出現異常是才會執行

出現異常時try-except-else-finally如下

try:
    i = 1 / 0
    print("没有出现异常i值", i)
except Exception as e:
    print("出现异常-->", e)
else:
    print("没有出现异常-->执行else")
finally:
    print("不管是否出现异常,这里的语句一定会被执行")


# 输出结果
出现异常--> division by zero
不管是否出现异常,这里的语句一定会被执行
登入後複製

沒有出現異常時try-except-else-finally如下

try:
    i = 1 / 1
    print("没有出现异常i值", i)
except Exception as e:
    print("出现异常-->", e)
else:
    print("没有出现异常-->执行else")
finally:
    print("不管是否出现异常,这里的语句一定会被执行")


# 输出结果
没有出现异常i值 1.0
没有出现异常-->执行else
不管是否出现异常,这里的语句一定会被执行
登入後複製

②、try-except-else-finally還可以拆開使用,有三種形式1)try-except-finally   2)try-except-else    3)try-finally。這裡就不展示程式碼了

4、異常的傳遞

#在發生例外的語句中沒有處理例外的語句,例外將會向上層傳遞,直到遇到處理異常的語句,或python解釋器終止程式

def test2():
    int("aa")

def test1():
    test2()

try:
    test1()
except Exception as e:
    print(e)
print("-----------")


# 输出结果
invalid literal for int() with base 10: &#39;aa&#39;
-----------
登入後複製

#如上test2中第2行出現異常,將向第5行呼叫test2的語句處傳遞,這裡依舊沒有異常處理語句,將繼續往上層傳遞到第8行處被except捕獲

5、拋出異常raise

#1)拋出python已定義的異常

透過raise 異常類型即可拋出一個異常,拋出的異常也會被except捕獲。如下邊第4行

age = 500
try:
    if age < 0 or age > 200:
        raise ValueError("age范围0-200")
    print("age", age)
except ValueError as e:
    print("出现异常-->", e)
# 输出结果
出现异常--> age范围0-200
登入後複製

2)拋出自定義例外#

抛出自定义异常首先得有个自定义的异常类,注:自定义的异常必须直接或间接的继承Exception基类

class MyException(Exception):  # 自定义异常类
    def __init__(self, msg):
        self.msg = msg


age = 500
try:
    if age < 0 or age > 200:
        raise MyException("age范围0-200")  # 抛出自定义异常
    print("age", age)
except MyException as e:
    print("出现异常-->", e)


# 输出结果
出现异常--> age范围0-200
登入後複製

当然自定义异常类也可以拥有许多的功能,就得看需求添加啦

6、在异常处理中抛出异常

有某需求:当捕获到异常时处理完后想继续抛出异常.....

在except中用raise可以抛出当前异常

try:
    i = 1 / 0  # 异常的语句
except Exception as e:
    print("出现异常-->", e)
    raise  # 处理完后继续抛出异常,raise表示抛出当前异常
print("-------------")


# 输出结果
出现异常--> division by zero
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
    i = 1 / 0
ZeroDivisionError: division by zero
登入後複製

以上是python中異常有哪些? python中異常的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板