1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python中的用戶定義異常與NZEC錯誤

        共 2725字,需瀏覽 6分鐘

         ·

        2020-10-05 02:19

        前提條件-?本文是對異常處理的擴展。

        當代碼出錯時,Python會引發(fā)錯誤和異常,這可能導致程序突然停止。Python還通過try-except提供了異常處理方法。一些最常見的標準異常包括IndexError,ImportError,IOError,ZeroDivisionError,TypeError和FileNotFoundError。用戶可以使用異常類創(chuàng)建自己的錯誤。

        創(chuàng)建用戶定義的異常

        程序員可以通過創(chuàng)建新的異常類來命名自己的異常。需要直接或間接從Exception類派生異常。盡管不是強制性的,但大多數(shù)異常的名稱都以“錯誤”結尾,類似于python中標準異常的命名。例如:

        # 創(chuàng)建用戶定義異常的python程序  # 類MyError是從超類異常派生的class MyError(Exception):       # 構造函數(shù)或初始值設定項    def __init__(self, value):         self.value = value       # __str_uu是print()值    def __str__(self):         return(repr(self.value))   try:     raise(MyError(3*2))   #?異常值存儲錯誤except MyError as error:     print('發(fā)生了新的異常: ',error.value)

        輸出:

        '發(fā)生了新的異常: 6'

        完全了解異常類

        要了解有關類異常的更多信息,請看以下代碼

        help(Exception)?

        從超類異常派生錯誤

        當模塊需要處理幾個不同的錯誤時,將創(chuàng)建超類異常。常用的方法之一是為該模塊定義的異常創(chuàng)建基類。此外,定義了各種子類來為不同的錯誤條件創(chuàng)建特定的異常類。

        # 類錯誤是從超級類異常派生的class Error(Exception):       # Error是異常的派生類,但是    #此模塊中異常的基類    pass  class TransitionError(Error):       # 操作嘗試狀態(tài)時引發(fā)    #不允許的過渡。    def __init__(self, prev, nex, msg):         self.prev = prev         self.next = nex           # 拋出的錯誤消息保存在消息中        self.msg = msg try:     raise(TransitionError(2,3*2,"Not Allowed"))   # 異常值存儲錯誤except TransitionError as error:     print('Exception occured: ',error.msg)

        輸出:

        ('Exception occured: ', 'Not Allowed')


        如何使用標準異常作為基類?

        運行時錯誤是一個類,是一種標準異常,當生成的錯誤不屬于任何類別時會引發(fā)此錯誤。該程序說明了如何將運行時錯誤用作基礎類,將網(wǎng)絡錯誤用作派生類。以類似的方式,任何異常都可以從Python的標準異常派生而來。

        # NetworkError具有基本RuntimeError# 也不例外class Networkerror(RuntimeError):     def __init__(self, arg):         self.args = arg   try:     raise Networkerror("Error")   except Networkerror as e:     print (e.args)

        輸出:

        (“?E”,“?r”,“?r”,“?o”,“?r”)



        在各種競爭性網(wǎng)站上進行編碼時,許多人一定遇到NZEC錯誤。顧名思義,NZEC(非零退出代碼)發(fā)生在您的代碼未能返回0時。當代碼返回0時,表示它已成功執(zhí)行,否則將根據(jù)錯誤類型返回其他一些數(shù)字。
        當程序結束并且應該返回“ 0”以指示是否完成正常并且無法執(zhí)行時,會導致NZEC。當然,還有更多與NZEC相關的案例。

        為何發(fā)生NZEC?(一個例子)

        在python中,通常多個輸入之間用逗號分隔,我們使用input()或int(input())進行讀取,但是大多數(shù)在線編碼平臺在測試時都會以空格分隔輸入,在這種情況下,輸入為int(input())無法正確讀取輸入并顯示NZEC之類的錯誤。

        怎么解決?

        例如,考慮一個簡單的程序,您必須讀取2個整數(shù)并將其打印(在輸入文件中,兩個整數(shù)都在同一行中)。假設您有兩個整數(shù),如下所示:

        23 45


        而不使用:

        n = int(輸入())k = int(輸入())

        用:

        n,k?=?raw_input().split('')n =整數(shù)(n)k =整數(shù)(k)

        用空格分隔輸入。

        錯誤代碼

        n = int(input()) k = int(input()) print n," ",k

        輸入:
        2 3
        當您使用上面的輸入IDE中運行以上代碼時,您將得到錯誤:

        追溯(最近一次通話):  在第1行的文件“ b712edd81d4a972de2a9189fac8a83ed.py”     n = int(輸入())  文件“”,第1行    2 3      ^SyntaxError:解析時出現(xiàn)意外的EOF

        當輸入在2條不同的2行中時,上面的代碼可以正常工作。您可以測試自己。要克服此問題,您需要使用split。

        正確的代碼

        n, k = raw_input().split(" ") n = int(n) k = int(k) print n," ",k

        輸入:

        7?3

        輸出:

        7?3

        NZEC錯誤的一些突出原因

        1. 無限遞歸或堆棧內(nèi)存不足。

        2. 輸入和輸出都與測試用例不完全相同。

        3. 作為在線平臺,使用與您的輸出與指定輸出完全匹配的計算機代碼測試程序。

        4. 當您的程序執(zhí)行基本的編程錯誤(例如除以0)時,也會顯示此類錯誤。

        5. 檢查變量的值,它們很容易受到整數(shù)流的影響。

        ????





        推薦閱讀

        瀏覽 36
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            色精品视频 | 91精品麻豆日日躁夜夜躁 | 好多水h有妇之夫 | 爱干av麻豆 | 国产免费一区二区视频观看免费 | 射一射在线视频 | 韩国一级毛片免费 | 成人毛片大全精品一区黑料 | 伦理片中文字幕 | 色哟哟无码精品一区二区三区 |