7 錯誤及異常處理

来源:https://www.cnblogs.com/huangfeilonghfl/archive/2023/02/04/17092539.html
-Advertisement-
Play Games

1.編寫一個計算減法的方法,當第一個數小於第二個數時,拋出“被減數不能小於減數"的異常。 class Sub(Exception): def __init__(self, x, y): self.x = x self.y = y try: a = int(input('請輸入被減數')) b = i ...


1.編寫一個計算減法的方法,當第一個數小於第二個數時,拋出“被減數不能小於減數"的異常。
class Sub(Exception):
    def __init__(self, x, y):
        self.x = x
        self.y = y


try:
    a = int(input('請輸入被減數'))
    b = int(input('請輸入減數'))
    if a < b:
        raise Sub(a, b)
except Sub as error:
    print('異常原因:被減數%d不能小於減數%d' % (error.x, error.y))
else:
    c = a - b
    print('%d減%d的結果為%d' % (a, b, c))

輸出結果:
請輸入被減數>? 0
請輸入減數>? 1
異常原因:被減數0不能小於減數1

請輸入被減數>? 4
請輸入減數>? 2
4減2的結果為2
2.編寫程式,提示輸入兩個數字a、b,併進行a與b的除法運算,把運算結果列印出來。要求對輸入和程式進行檢測,可以排除所有的錯誤。(可以使用以下的異常檢查下麵的錯誤:IOError、ValueError、ZeroDivisionError等,不能使用BaseException異常)。
方法一:
def division() :
    try :
        a, b = int(input("輸入兩個數字以完成除法(a/b):"))
        print("{} / {} = {}".format(a, b, c))

    except ZeroDivisionError :
        print("Error: The divisor can not be zero")  # 除數不能為零!
    except IOError :
        print("Error:Wrong input or output")  # 輸入或輸出錯誤”
    except ValueError :
        print("Error:Wrong value,變數應為數值類型!")  # 值錯誤
    except NameError :
        print("Error: No characters or strings 變數缺少")  # 使用了沒有定義的對象,沒有字元或字元串
    except SyntaxError :
        print("Error:No symbols or whitespaces")  # 語法錯誤:無符號或空格
    except TypeError :
        print("Error: The data type is wrong and must be number")  # 數據類型錯誤,必須要求除數和被除數是數字,不能是字元串或者其他
    else :
        print(a, '/', b, '=', c)


輸出結果:
3/0 Traceback (most recent call last): File "D:\Anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-31-f6cc6d14333b>", line 1, in <module> 3/0 ZeroDivisionError: division by zero 8/2 Out[33]: 4.0 hhhhj/7 NameError: name 'hhhhj' is not defined



方法二:
try: a = int(input("Please input the first number: ")) b = int(input("Please input the second number: ")) c = a / b print("{} / {} = {}".format(a, b, c)) except IOError: print("You input a non-number!") except ValueError: print("You input a non-number!") except ZeroDivisionError: print("You can not divide a number by zero!") else: print("Division done!") 輸出結果: 請輸入a的值:>? 3 請輸入b的值:>? 2 a除以b的結果是:1.5 請輸入a的值:>? q 輸入不是正確的數字,請重新輸入: 請輸入a的值:>? f 輸入不是正確的數字,請重新輸入:
3、定義函數,在控制臺中獲取成績(1-100),如果輸入有誤,請重新輸入。
class OutOfRange(Exception) :
    def __init__(self, x) :
        self.x = x
        self.x = "輸入有誤,請重新輸入"


def grades() :
    try :
        x = int(input("請輸入[0,100]之間的分數:\n"))
        if x < 0 or x > 100 :
            raise OutOfRange(x)
    except OutOfRange as er :
        print(er.x)
    else :
        print("你的成績為", x)


grades()

輸出結果:
100
你的成績為 100
-80
輸入有誤,請重新輸入
120
輸入有誤,請重新輸入
# 方法二:
def score() :
    global score
    try :

        score = int(input('請輸入學生的成績:'))
        assert 0 <= score <= 100  # 斷言 成績必須在0-100範圍內
        if score >= 90 :
            print("輸入正確,成績為:A ,優秀")
        if 80 <= score < 90 :
            print("輸入正確,成績為:B,良好")
        if 60 <= score < 80 :
            print("輸入正確,成績為:C,合格")
        if score < 60 :
            print("輸入正確,成績為:D,不及格")
    except ValueError :
        print("輸入有誤,輸入必須為整數,請重新輸入")
    except AssertionError :  # 斷言異常信息
        print("輸入有誤,輸入的成績{},不在0-100範圍內請重新輸入,".format(score))
    else :  # 可選項,必須try-except語句為前提
        print("程式正常運行,沒有捕捉到異常")


score()

輸出結果: 請輸入學生的成績:
>? 99 輸入正確,成績為:A ,優秀 程式正常運行,沒有捕捉到異常 請輸入學生的成績:>? 55 輸入正確,成績為:D,不及格 程式正常運行,沒有捕捉到異常 請輸入學生的成績:>? 66 輸入正確,成績為:C,合格 程式正常運行,沒有捕捉到異常 請輸入學生的成績:>? -98 輸入有誤,輸入的成績-98,不在0-100範圍內請重新輸入,

 

方法一:

def division() :
    try :
        a, b = int(input("輸入兩個數字以完成除法(a/b):"))
        print("{} / {} = {}".format(a, b, c))

    except ZeroDivisionError :
        print("Error: The divisor can not be zero")  # 除數不能為零!
    except IOError :
        print("Error:Wrong input or output")  # 輸入或輸出錯誤”
    except ValueError :
        print("Error:Wrong value,變數應為數值類型!")  # 值錯誤
    except NameError :
        print("Error: No characters or strings 變數缺少")  # 使用了沒有定義的對象,沒有字元或字元串
    except SyntaxError :
        print("Error:No symbols or whitespaces")  # 語法錯誤:無符號或空格
    except TypeError :
        print("Error: The data type is wrong and must be number")  # 數據類型錯誤,必須要求除數和被除數是數字,不能是字元串或者其他
    else :
        print(a, '/', b, '=', c)

輸出結果:

3/0
Traceback (most recent call last):
  File "D:\Anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-31-f6cc6d14333b>", line 1, in <module>
    3/0
ZeroDivisionError: division by zero

8/2
Out[33]: 4.0

    hhhhj/7
NameError: name 'hhhhj' is not defined

方法二:

try:
    a = int(input("Please input the first number: "))
    b = int(input("Please input the second number: "))
    c = a / b
    print("{} / {} = {}".format(a, b, c))
except IOError:
    print("You input a non-number!")
except ValueError:
    print("You input a non-number!")
except ZeroDivisionError:
    print("You can not divide a number by zero!")
else:
    print("Division done!")

輸出結果:
請輸入a的值:>? 3
請輸入b的值:>? 2
a除以b的結果是:1.5

請輸入a的值:>? q
輸入不是正確的數字,請重新輸入:
請輸入a的值:>? f
輸入不是正確的數字,請重新輸入:

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 新建一個STM32CubeIDE 新工程 選擇自己的晶元型號,我的是STM32F103RCT6 選擇工程保存位置,不能有中文路徑,會報錯 選擇下載方式、一定要選,不然下次下載有問題 選擇時鐘來源,我的板子有8Mhz、32.768Khz兩個外置晶振 配置時鐘頻率 生成相應的.c .h文件,方便我們管理 ...
  • Jenkins 與 keycloak集成 搭建keycloak 運行keycloak服務 創建docker-compose.yaml文件,運行docker-compose up -d 拉起服務 version: '3' networks: keynet: driver: bridge service ...
  • 在上篇文章 《深入理解 Linux 物理記憶體分配全鏈路實現》 中,筆者為大家詳細介紹了 Linux 記憶體分配在內核中的整個鏈路實現: 但是當內核執行到 get_page_from_freelist 函數,準備進入伙伴系統執行具體記憶體分配動作的相關邏輯,筆者考慮到文章篇幅的原因,並沒有過多的著墨,算是 ...
  • 總結-舊生命周期 初始化階段: 由ReactDOM.render()觸發 初次渲染 constructor() componentWillMount() render() componentDidMount() > 常用 一般在這個鉤子中做一些初始化的事,例如:開啟定時器,發送網路請求,訂閱消息 更 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 本文用一個簡單的 demo 講解 App端 半屏連續掃碼 的實現方式,包括(條形碼、二維碼等各種各樣的碼)。 我會從實現思路講起,如果你比較急可以直接跳到 動手實現 章節獲取代碼。 開發和運行環境 開發工具:HBuilderX 前端框架: ...
  • 一篇文章帶你瞭解設計模式——行為型模式 在之前的文章我們已經介紹了設計模式中的創建者模式和結構型模式,下麵我們來介紹最後一部分行為型模式 行為型模式用於描述程式在運行時複雜的流程式控制制,即描述多個類或對象之間怎樣相互協作共同完成單個對象都無法單獨完成的任務 行為型模式分為類行為模式和對象行為模式,前者 ...
  • 開篇詞 | 四縱四橫,帶你透徹理解分散式技術 誰更好掌握了分散式技術,誰就更容易在新一輪技術浪潮中獲得主動。 很多有多年工作經驗的人,在分散式上面,也可能會有下麵的問題: 各種分散式概念、名詞學了一大堆,但經常張冠李戴,傻傻分不清楚。 做了多年技術,也參與了很多分散式技術實踐,卻無法回答工作中各種分 ...
  • 概述 數組是相同類型數據的有序集合 可以是任何類型 每一個數據被稱為該數組的一個數組元素,可以使用下標訪問每一個元素 下標從0開始,按順序遞增 數組長度是固定的,創建後不可改變 數組屬於引用類型 聲明、記憶體、初始化和使用 聲明 可以使用 Type[] arr;//常用 或者 Type arr[]; ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...