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語句
finally
和else
不一樣,不管有沒有異常引發,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='')