異常處理try-except


Python異常處理

我們一般使用try-except語句來進行異常處理。

使用except Exception as err可以統一捕捉所有異常,而也可以分開處理單個異常。

# 分開捕捉單個異常

try:
    num1 = int(input('Enter the first number:'))
    num2 - int(input('Enter the sencond number:'))
    print(num1 / num2)
except ValueError: #捕捉數字轉化異常
    print('Please input a digit!')
except ZeroDivisionError: #捕捉除0異常
    print('The second number cannot be zero')

# 兩種異常一起捕捉

try:
    num1 = int(input('Enter the first number:'))
    num2 - int(input('Enter the sencond number:'))
    print(num1 / num2)
except (ValueError,ZeroDivisionError): 
    print('Invalid input!')

# 統一捕捉所有異常

try:
    num1 = int(input('Enter the first number:'))
    num2 - int(input('Enter the sencond number:'))
    print(num1 / num2)
except Exception as err:
    print('Something webt wrong!')
    print(err)

else語句

try-except還可以和else一起使用,如果語句中沒有異常引發,那么這個else語句就會執行。

try:
    num1 = int(input('Enter the first number:'))
    num2 - int(input('Enter the sencond number:'))
    print(num1 / num2)
except (ValueError,ZeroDivisionError): 
    print('Invalid input!')
else:
    print('Aha, everything is OK.')

循環

如果我們想要用戶直到輸入正確,那么就要使用循環,使用while True加上break語句

while True:
	try:
        num1 = int(input('Enter the first number:'))
        num2 - int(input('Enter the sencond number:'))
        print(num1 / num2)
    except (ValueError,ZeroDivisionError): 
        print('Invalid input!')
    print('Aha, everything is OK.')

Finally語句

finallyelse不一樣,不管有沒有異常引發,finally語句都要執行。

try:
    num1 = int(input('Enter the first number:'))
    num2 - int(input('Enter the sencond number:'))
    print(num1 / num2)
except (ValueError,ZeroDivisionError): 
    print('Invalid input!')
finally:
    print('It is a finally clause.')

上下文管理器(Context Manager)和With語句

如果我們打開文件使用下面的代碼,在finally語句中,因為f可能沒被成功定義,可能還是會報錯。

try:
    f = open('data.txt')
    for line in f:
        print(line, end ='')
except IOError:
    print('Cannnot open the file!')
finally:
    f.close()

而我們可以使用下面的代碼打開文件,通過這個上下文管理器可以定義和控制代碼塊執行前的准備動作及執行后的收尾動作。

with open('data.txt') as f:
    for line in f:
        print(line, end='')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM