Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?

Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?

WBOY
WBOYnach vorne
2023-05-07 21:10:10950Durchsuche

    1. Vorwort

    Erklärt hauptsächlich die Wissenspunkte im Zusammenhang mit der Einführung, Erfassung und Verarbeitung von Ausnahmen in Python

    # 🎜🎜#2. Sammlung der Ausnahmebehandlung

    2.1 Erläuterung der Ausnahmebehandlung

    Bevor wir die Ausnahmebehandlung offiziell einführen, müssen wir zunächst jedem ein Konzept verständlich machen: Es gibt keine So etwas wie perfekte Programmierung, es gibt immer Situationen, die nicht in Betracht gezogen werden können, denn niemand ist perfekt, Menschen sind fehlerhaft, ganz zu schweigen davon, dass die Programmierung von Menschen durchgeführt wird. Glauben Sie nicht, was irgendjemand sagt: Mein Code ist perfekt, das wird definitiv keine Probleme geben Ebenso müssen Sie wissen, dass es in der Welt der Programmierung keine absolute Zuverlässigkeit gibt.

    Jeder sollte sich auch darüber im Klaren sein, dass es definitiv Probleme geben wird, wenn das Programm nicht gemäß dem normalen Prozess ausgeführt wird, wir nennen es eine Ausnahmebehandlung Wie der Name schon sagt, soll diese Art von Ausnahmesituation gelöst werden, sodass das Programm gemäß Logik und Ablauf normal ausgeführt werden kann.

    2.2 Ausnahmeerfassung

    Wenn ein Programm einen Fehler meldet, wird es beendet. Wenn wir die Ausnahme nach der Behandlung ausführen, wird der Fehler nicht erneut angezeigt Durch die Erfassung dieses Fehlers kann das Programm reibungslos ausgeführt werden. Schauen wir uns zunächst ein Beispiel an:

    print("------------------- 欢迎来到报名注册系统 -------------------")
     
    age = (input("请输入您的年龄:"))
    age = int(age)
    if age < 18:
        print("很遗憾,您暂时不满足注册条件")
    else:
        print("恭喜您符合注册条件")

    Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?

    Wie gezeigt Geben Sie im obigen Code ein: Wenn die Daten 18 sind, kann die Logikberechnung des Programms normal ausgeführt werden, und der Code kann bis zum Ende normal ausgeführt werden. Aber gibt es bei einem solchen Code wirklich kein Problem? Schauen wir uns dieses Beispiel noch einmal an. Wenn die Eingabe aus englischen ABC-Buchstaben besteht, tritt ein ValueError-Fehler auf. Er teilt uns buchstäblich mit, dass ein numerischer Fehler aufgetreten ist und die Zeichenfolge nicht in einen Ganzzahltyp konvertiert werden kann:

    print("------------------- 欢迎来到报名注册系统 -------------------")
     
    age = (input("请输入您的年龄:"))
    age = int(age)
    if age < 18:
        print("很遗憾,您暂时不满足注册条件")
    else:
        print("恭喜您符合注册条件")

    # 🎜🎜#

    Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?Wenn ein ValueError auftritt, können wir ihn durch Ausnahmeerfassung behandeln. Der verarbeitete Code lautet:

    print("------------------- 欢迎来到报名注册系统 -------------------")
    age = (input("请输入您的年龄:"))
     
    try:
        age = int(age)
    except:
        print("您的年龄输入非法,请重新运行本程序")
     
    if age < 18:
        print("很遗憾,您暂时不满足注册条件")
    else:
        print("恭喜您符合注册条件")

    Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?Wie im Bild oben gezeigt, führen wir das Programm erneut aus und geben ein. Das Programm kann immer noch nicht ausgeführt werden. Der aktuelle Fehler ist ein TypeError-Fehler.

    2.3 Prinzip zum Abfangen von Ausnahmen

    Um den oben genannten TypeError-Fehler zu beheben, verstehen wir zunächst das Prinzip des Abfangens von Ausnahmen. Wenn eine try-Anweisung offiziell gestartet wird, erstellt Python eine Markierung Der Kontext des Programms und die Rückkehr zur Marke, wenn eine Ausnahme auftritt. Die Try-Klausel wird zuerst ausgeführt, und nachfolgende Szenarios können auftreten:

    Szenario 1: Wenn beim Ausführen der Try-Anweisung eine Ausnahme auftritt , springt Python zurück und versucht, die erste Ausnahmeklausel auszuführen, die der Ausnahme entspricht. Nachdem die Ausnahme behandelt wurde, wird die Codeausführung fortgesetzt.

    Szenario 2: Wenn beim Ausführen der Try-Anweisung eine Ausnahme auftritt und es keine passende Ausnahmeklausel gibt, wird die Ausnahme an die obere Try- oder oberste Ebene des Programms gesendet. Das Programm endet hier und die Fehlermeldung wird gedruckt.

    Szenario 3: Wenn beim Ausführen der Try-Klausel keine Ausnahme auftritt, führt Python die Codeanweisung weiterhin aus.

    Nachdem wir das Prinzip der Ausnahmeerfassung verstanden haben, schauen wir uns an, wie der vorherige TypeError-Fehler behoben werden kann. Die wörtliche Bedeutung ist, dass Ganzzahlen nicht mit Zeichenfolgen verglichen werden können Davor haben wir die Variable age verarbeitet, aber da die Ausnahme von try erfasst wird, wird die erste mit try übereinstimmende Ausnahmeklausel ausgeführt und die Klausel ersetzt die Ausnahmeanweisung, sodass die Typkonvertierung hier ungültig ist und das Programm ausgeführt wird Beim Ausführen tritt erneut ein Typfehler auf. Die Lösung dieses Problems ist ebenfalls sehr einfach.

    Wenn die Beurteilungsanweisung in try platziert wird, ändert sie sich geringfügig. Wenn keine Ausnahme abgefangen wird, wird das Programm wie gewohnt ausgeführt und die Beurteilung wird wirksam. Wenn die Ausnahme abgefangen wird, wird sie direkt gesprungen Wenn die Meldung angezeigt wird, dass Ihr Alter illegal ist, tritt kein TypeError-Fehler auf. Dies ist übrigens unser häufiger Entwicklungsfehler Die zweite Änderung lautet wie folgt:

    # 程序仍然有可优化的地方,仅展示try.. except语句的使用方式
    print("------------------- 欢迎来到报名注册系统 -------------------")
    age = (input("请输入您的年龄:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遗憾,您暂时不满足注册条件")
        else:
            print("恭喜您符合注册条件")
    except:
        print("您的年龄输入非法,请重新运行本程序")

    Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?

    Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?

    #🎜 🎜#2.4 Spezifische Ausnahmeerfassung Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?

    Die spezifische Ausnahmeerfassung dient, wie der Name schon sagt, dazu, eine bestimmte Ausnahme zu erfassen, die auftritt, z. B. den von uns festgestellten ValueError. Wenn Sie andere Ausnahmetypen erfassen, wird ValueError weiterhin erfasst Beim Ausführen des Codes ist ein Fehler aufgetreten:

    print("------------------- 欢迎来到报名注册系统 -------------------")
    age = (input("请输入您的年龄:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遗憾,您暂时不满足注册条件")
        else:
            print("恭喜您符合注册条件")
    # 这里进行捕获的异常类型是IndexError,非ValueError,最后的结果仍然会报错,因为没有成功捕获
    except IndexError:
        print("您的年龄输入非法,请重新运行本程序")

    当捕获的类型错误时,仍然会弹出报错终止程序运行,好比一个人酒驾,那么就应该由交警处理而不是民政局的人处理,因为那不是它的职责,异常捕获还要讲究对口,如下代码所示,如果设置成ValueError就能够成功进行捕获,就好比交警处理了酒驾一样,完美解决:

    print("------------------- 欢迎来到报名注册系统 -------------------")
    age = (input("请输入您的年龄:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遗憾,您暂时不满足注册条件")
        else:
            print("恭喜您符合注册条件")
    except ValueError:
        print("您的年龄输入非法,请重新运行本程序")

    Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?

    2.5 异常捕获的处理

    刚刚我们举了一个例子,当异常捕获为IndexError时,运行程序后仍然会出现ValueError的错误,但我们不设置直接使用except时反而能直接捕获,那我们还要设置它做什么呢?想必有部分同学心中已经会产生这样的疑问了。

    except可以理解为万能警察,万能捕手,它可以捕获所有的异常类型(极少数无法直接捕获),而特定的异常捕获只能捕获特定出现的异常情况,我们之所以还要使用,是因为它是专门捕获一种类型的,好比一个人有皮肤问题,那么肯定是挂皮肤科门诊要比急诊科的医生要更加专业,正所谓术业有专攻。

    except因为是万能捕手,所以它在抓获异常后的处理方式是一样的,好比感冒和心脏病发作两种症状,都是同样的对待方式显然是不合理的,那么这个时候就会由特定的“医生” (特定捕获) 进行对应的处理方式。

    目前常见的一些报错有:ValueError、TypeError、IndexError等等,那么在整个自动化测试的过程中,势必会遇到很多其他的报错,当我们不清楚其他报错的情况下如何进行异常捕获呢?两种方式,第一种是错过一次就记得了,好比一开始进行编程的小伙伴们,谁也不知道会遇到ValueError一样,当碰到过一次后,下一次就会特别注意这个事情,提前做一个捕获,俗称踩坑。那另外一种方式就是在末尾继续添加except,万能捕手我们也留着,这样当特定捕获没有捕获到异常但程序出现了异常时,except就会进行捕获:

    print("------------------- 欢迎来到报名注册系统 -------------------")
    age = (input("请输入您的年龄:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遗憾,您暂时不满足注册条件")
        else:
            print("恭喜您符合注册条件")
    # 这里会报错ValueError,因为捕获的类型是IndexError,很明显无法进行ValueError异常捕获,那么我们可以在添加一个万能捕手except来进行捕获
    except IndexError:
        print("您的年龄输入非法,请重新运行本程序")
    # 在下面可以在进行一个except的添加:
    except:
        print("万能捕手在此,束手就擒吧!")

    Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?

    2.6 except、Exception与BaseException

    except我们知道了是万能捕手,但其实它的身份是Exception,Python默认帮我们省略了,实际上它是这样的:

    except Exception:
        print("万能捕手在此,束手就擒吧!")

    except与except Exception完全等价,日常的编写时可加可不加,依据个人习惯和喜好决定即可。而BaseException是Exception的父类,作为子类的Exception无法截获父类BaseException类型的错误。

    BaseException: 包含所有built-in exceptions

    Exception: 不包含所有的built-in exceptions,只包含built-in, non-system-exiting exceptions,像SystemExit类型的exception就不包含在其中。Python所有的错误都是从BaseException类派生的

    2.7 finally用法

    finally的作用是无论except是否成功捕获到了对应的异常,均需要执行finally下的代码:

    """
    参考如下代码:打开了love.txt这个文件,进行了阅读,又想写入一点东西,但现在是只读的模式,无法进行内容写入,故此会报错io.UnsupportedOperation
    虽然没有写入成功,但是这个文件是成功读取了的,那么在文件的章节中提到过,如果打开了一个文件要记得关闭,否则其他人无法使用
    所以在finally这里我们就可以加上f.close(),代表着无论是否有捕捉到异常,最后我都要关闭这个文件,以确保其他人能够正常使用该文件
    """
     
    import io
     
    try:
        f = open("love.txt", encoding="utf-8", mode="r")
        f.read()
        f.write("随便写点~")
    except io.UnsupportedOperation:
        print("抓的就是你这个io.UnsupportedOperation报错")
    finally:
        # finally的作用是无论except是否成功捕获到了对应的异常,均需要执行finally下的代码
        f.close()

    2.8 异常信息的打印输出

    虽然我们能够捕获异常,但我们肯定要了解到底是什么异常,在捕获到一个异常时我们可以进行异常信息的打印:

    print("------------------- 欢迎来到报名注册系统 -------------------")
    age = (input("请输入您的年龄:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遗憾,您暂时不满足注册条件")
        else:
            print("恭喜您符合注册条件")
    # 这里会报错ValueError,捕获的是IndexError,很明显无法进行异常捕获,那么我们可以在添加一个万能捕手except来进行捕获
    except IndexError as error:
        print("您的年龄输入非法,请重新运行本程序")
    # 在这里加一个as,后面接一个变量,然后进行变量打印即可,当出现对应的异常时就会打印对应异常的信息
    except Exception as error:
        print("万能捕手在此,束手就擒吧!", f"已捕获异常:{error}")

    Wie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?

    刚刚有提到except与except Exception是等价的,但是如果想使用as必须要使用后者,这是语法规定:

    # 正确用法,在捕获类型后加as 变量
    except Exception as error:
        print("万能捕手在此,束手就擒吧!", f"已捕获异常:{error}")
     
    # 错误的用法,不符合语法规则
    except as error:
        print("万能捕手在此,束手就擒吧!", f"已捕获异常:{error}")

    Das obige ist der detaillierte Inhalt vonWie implementiert man einen Mechanismus zur Ausnahmebehandlung in automatisierten Python-Tests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen