python try语句用法
Python中的try语句用法
在编写程序时,经常需要处理错误和异常情况,以保证程序的正常稳定运行。Python中的try语句为我们提供了一种异常处理机制,可以在程序出错时执行特定处理方式,从而避免程序崩溃或出现严重错误。
一、try语句的基本用法
try语句的基本语法如下:
```
try:
# 执行代码块
except Exception1:
# 发生Exception1异常,执行这里的代码
except Exception2:
# 发生Exception2异常,执行这里的代码
else:
# 没有发生异常,执行这里的代码
finally:
# 无论是否发生异常,都执行这里的代码
```
try语句中,代码块为需要检测异常的代码块。如果代码块中出现了异常,会抛出异常并跳转到相应的`except`语句块中执行。如果没有发生异常,会执行`else`语句块中的代码。`finally`语句块中的代码则会在try语句执行后无论是否出现异常都会执行。不同的异常可以对应到不同的`except`语句块中。
二、try语句的异常处理方法
1. 捕获异常
在使用`try`语句时,可以在代码块中使用各种可能导致异常的函数或语句,当发生异常时,程序会自动捕获异常并跳转到对应的`except`语句块中执行。
例如,下面的代码中尝试打开一个不存在的文件,由于文件不存在,会抛出`FileNotFoundError`异常,并通过`except`语句块进行处理:
```
try:
f = open('nonexistent.txt', 'r')
print(f.read())
except FileNotFoundError:
print('Oops! File not found.')
```
输出:
```
Oops! File not found.
```
在这个例子中,程序没有崩溃,而是执行了`except`语句块中的代码,抛出了一个友好的异常提示。
2. 抛出异常
在某些情况下,我们需要手动抛出一个异常,并在程序中进行处理。可以使用`raise`语句来抛出一个异常,如下所示:
```
try:
age = int(input("请输入年龄:"))
if age < 18:
raise ValueError("年龄不能小于18岁!")
else:
print("你已成年!")
except ValueError as e:
print(e)
```
在这个例子中,如果输入的年龄小于18岁,程序会手动抛出一个`ValueError`异常,并在`except`语句块中输出异常信息。
3. 处理多种异常
在使用`try`语句时,可以为不同类型的异常分别添加对应的`except`语句块,从而实现多种异常的处理方式。
例如,下面的代码中尝试将一个字符串转换为整数,如果字符串格式不正确,则会抛出`ValueError`或`TypeError`异常,并通过对应的`except`语句块进行处理:
```
try:
s = 'abc'
n = int(s)
except ValueError:
print('Oops! Value error.')
except TypeError:
print('Oops! Type error.')
```
输出:
```
Oops! Value error.
```
在多个`except`语句块中,Python会按照从上到下的顺序依次检查异常类型,当发现匹配的异常类型时,就会跳转到对应的`except`语句块中执行。
4. 处理未知异常
当程序中出现未知异常时,可以使用`except`语句块中的`Exception`关键字来捕获所有类型的异常,并通过打印异常信息或其他方式进行处理。
例如,下面的代码中尝试将两个列表相加,由于列表数据类型不同,会抛出`TypeError`异常,但我们并没有在`except`语句块中指定异常类型,而是使用通配符`Exception`来捕获所有异常类型:
```
try:
a = [1, 2, 3]
b = ['a', 'b', 'c']
c = a + b
except Exception as e:
print('Oops! An error occurred:', e)
```
输出:
```
Oops! An error occurred: can only concatenate list (not "str") to list
```
在这个例子中,程序捕获了所有类型的异常,并通过`print`语句输出了异常信息。
三、try语句的注意事项
1. `finally`语句块的作用
不论是否出现异常,`finally`语句块中的代码都会被执行,并且在`finally`中可以进行一些必要的清理工作,如关闭文件、释放资源等。
例如,下面的代码中使用`try`语句打开一个文件,并在`finally`语句块中关闭文件,以确保程序正常结束时文件已关闭:
```
try:
f = open('test.txt', 'r')
print(f.read())
except IOError:
print('Oops! File error.')
finally:
f.close()
```
在这个例子中,无论文件读取是否成功,最终都会执行`finally`语句块中的代码,关闭打开的文件。
2. 使用as关键字获取异常信息
在`except`语句块中,可以使用`as`关键字给异常取一个别名,并在后续程序中使用这个别名来获取异常信息。
例如,下面的代码中,程序尝试将一个字符串转换为整数,但由于字符串为非法格式导致抛出`ValueError`异常,通过使用`as`关键字获取异常信息,输出异常的具体信息:
```
try:
s = 'abc'
n = int(s)
except ValueError as e:
print('Oops! Value error:', e)
```
输出:
```
Oops! Value error: invalid literal for int() with base 10: 'abc'
```
在这个例子中,由于指定了`as`关键字,我们可以获取到异常的具体信息,并进行处理。