45、异常

小白量化 2025-12-10 10:09:12 36 举报

1. 异常
1.1 含义
在程序运行过程中,当Python检测到一个错误时,解释器将无法继续执行后续代码,并显示相应的错误提示信息,这种情况被称为"异常"。
它代表程序运行时发生的错误或异常情况,会导致程序正常执行流程的中断

# 示例
num = input("请输入一个数字:"
if num > 18:   # 字符串和整型之间进行比较,要报错!
   print("哈哈哈")

1.2 异常处理【捕获异常】
1.2.1 语法格式

# 语法格式
try:
   尝试执行的代码块
except 异常类型 as 变量:
   检测到异常要执行的代码块
else:
   没有检测到异常要执行的代码块
finally:
   无论是否检测到异常,都会执行的代码块
# 示例
try:
   num = int(input("请输入一个数字:"))  # 如果输入的不是数字,就会报错!
   print(num, type(num))
except:
   print("转换失败!")
   
# 使用异常处理可以防止程序因异常而终止运行!
print("哈哈哈哈啊!!!")
print("哈哈哈哈啊!!!")
print("哈哈哈哈啊!!!")
print("哈哈哈哈啊!!!")

1.2.2 捕获指定异常

# 示例1
try:
   num = int(input("请输入一个数字:")) # 如果输入的不是数字,就会报错!
   print(num, type(num))
except ValueError:
   print("值错误!")
# 示例2
try:
   print(abc)
except:  # 未指定异常类型,可以捕获!
   print("运行失败!")
   
   
try:
   print(abc)
except ValueError:  # 指定异常类型,无法捕获
   print("值错误!")
# 示例3
try:
   print(abc)
except ValueError:  # 捕获值错误
   print("值错误!")
except NameError:   # 捕获命名错误
   print("命名错误!")
   
try:
   print(abc)
except (ValueError, NameError):  # 只捕获值 或 命名错误
   print("错误!")
# 示例4
try:
   print("a" > 1)   # TypeError
except (ValueError, NameError):  # 只捕获值、命名错误,未指定捕获TypeError错误!
   print("错误!")
 
print(123) # 无法运行这后面的代码!

1.2.3 捕获异常具体描述信息

# 示例1
try:
   num = int(input("请输入一个数字:"))
   print(num, type(num))
   print(name)
   print(1 > "1")
   print("abc"[4])
   if True:
   print(1234)    # IndentationError: expected an indented block after 'if' statement on line 8
except Exception:    # 万能异常类,能够捕获程序中发生的任意非语法错误类型的异常!如果语法错误,比如缩进问题,则无法捕获!
   print("失败!")
# 示例2
try:
   num = int(input("请输入一个数字:"))
   print(num, type(num))
   print(name)
   print(1 > "1")
   print("abc"[4]
except Exception as e:   # 将捕获到的异常对象(包含异常具体描述信息)保存到变量e中!语法错误无法捕获!
   print("错误原因:", e)
# 示例3
try:
   if True:   # if下面无缩进,语法错误!
   print(1234)    # IndentationError: expected an indented block after 'if' statement on line 9
except Exception as e:   # 将捕获到的异常对象(包含异常具体描述信息)保存到变量e中!语法错误无法捕获!
   print("错误原因:", e)

1.2.4 else 语句
当try中的代码块成功执行并且没有引发任何异常时,你希望执行一些额外的代码,此时可以放入else语句块中。

# 示例
try:
   num = int(input("请输入一个数字:"))
except Exception as e:
   print("错误原因:", e)
else:
   print("转换成功!")
   print(num, type(num))

1.2.5 finally 语句
finally 语句用于定义无论是否发生异常都要执行的代码块。它通常和try...except语句配合使用,以确保即使在遇到错误时也能执行某些操作,例如关闭文件,释放系统资源等。

# 示例
# 先打开文件,再操作文件,最后确保关闭文件
print("打开文件")
try:
   print(文件操作)
except Exception as e:
   print("错误原因:", e)
finally:    # 确保文件被关闭
   print("关闭文件")
   
print("哈哈哈哈")

1.3 抛出自定义异常

在Python中,如果你想要在自己的程序中主动抛出一个异常,可以使用 raise 语句来实现。raise 语句允许你指定要抛出的异常类型和可选的异常信息。

步骤:

① 自定义异常:异常类型(异常具体描述信息)
② Exception("小白制造的异常")  ,只使用一次!如果需要多次使用,就要定义变量去保存!

raise Exception("小白制造的异常") ,只使用一次!

③ 在合适的位置抛出:raise 异常对象
e = Exception("小白制造的异常"),需要使用多次!
raise e

# 示例
# 需求:创建一个函数,根据用户输入的数字,判断该数字是否为偶数。
# 如果输入的数字为偶数,则返回True,否则返回False。如果用户输入的数字不是数字,则抛出自定义异常!
def is_even():
   # 用户输入数据
   num = input("请输入数字:")  # num:"xiaobai"
   # 判断是否是非数字字符
   if not num.isdigit():   # not False ==> True
       raise Exception("输入的数字不是纯数字!")
   else:
       # 将用户输入的数字转换成整型
        num = int(num)
   # 判断是否是偶数:能够被2整除的数  ==》  除以2没有余数
   # 2  4  6  8
   # 2 / 2 = 1.0     4 / 2 = 2.0     6 / 2 = 3.0
   # 2 // 2 = 1      4 // 2 = 2      6 // 2 = 3
   # 2 % 2 = 0       4 % 2 = 0       6 % 2 = 0
   if num % 2 == 0:
       return True
   else:
       return False
   
# 为防止程序因异常而终止,可以使用try...except语句进行异常处理
try:
   # 调用函数并接收返回值
   rs = is_even()
   print(rs)
except Exception as e:
   print("错误原因:", e)


量化小白,从0开始学量化! 1

著作权归文章作者所有。 未经作者允许禁止转载!

最新回复 ( 0 )
发新帖
0