异常的定义
异常是错误出现时,可以在正常的控制流程之外采取的行为。
一、try-except
try:
age = int(input("请输入年龄:"))
if age >= 18:
print("你已成年")
else:
print("你未成年")
except ValueError as error:
print("输入不合法")
print(error)
print("程序结束")
请输入年龄:abc
输入不合法
invalid literal for int() with base 10: 'abc'
程序结束
二、try-except-else
若没异常没执行except,则执行else里的语句
try:
age = int(input("请输入年龄:"))
except ValueError as error:
print("输入不合法")
else:
if age >= 18:
print("你已成年")
else:
print("你未成年")
print("程序结束")
请输入年龄:a
输入不合法
程序结束
三、try-except-finally
finally
无论是否发生异常,都得执行,如关闭文件
try:
file = open("text.txt", "w") # 打开文件
s = "hello world"
file.write(s) # 操作文件
except:
print("操作异常")
finally: # 无论是否发生异常,都得执行
file.close() # 关闭文件
print("关闭文件")
四、处理多个异常
方法一:
try:
age = int(input("请输入年龄:"))
x = 10 / age
except ValueError:
print("请输入整数")
except ZeroDivisionError:
print("年龄不能为0")
else:
print(f"age is {age}")
print(f"x is {x}")
方法二:
try:
age = int(input("请输入年龄:"))
x = 10 / age
except (ValueError, ZeroDivisionError):
print("请输入合理的年龄")
else:
print(f"age is {age}")
print(f"x is {x}")
五、raise主动抛出异常
try语句中,遇到了异常才会抛出异常
raise是为了主动抛出异常
先主动抛出,再except中抓住,为的是让程序继续运行
def is_adult(age):
if age < 18:
raise ValueError("你还未成年")
try:
age = int(input("请输入年龄:"))
is_adult(age) # 已经抛出<18的异常,except不会执行。如果是其他abc异常,仍会执行except
except ValueError as e:
print(e)
print("continue")
请输入年龄:1
你还未成年
continue
总结与注意:
pycharm断点调试
step into
常用
step over
跳过没断点的函数,直接出结果,比step into跳动大
run to cursor
只跳到下一个断点,比step over跳动大