当我们在运行Python程序时,难免会有一些小错误,比如说我们要输入一个整数,在转换变量类型时可能就会出差错。我们为了避免报错造成的尴尬,所以我们可以用try进行调试。
a = input("请输入一个整数:")
a = int(a)
print("你输入的数+10后等于",a+10)
这时,我们输入一个整数是不会报错的:
请输入一个整数:12
你输入的数+10后等于 22
但当你不小心输入了一个字母,Python就会“疯狂报错”:
请输入一个整数:a
Traceback (most recent call last):
File “main.py”, line 2, in <module>
a = int(a)
ValueError: invalid literal for int() with base 10: ‘a’
或许你输入了一个小数,但Python可不接受:
请输入一个整数:10.5
Traceback (most recent call last):
File “main.py”, line 2, in <module>
a = int(a)
ValueError: invalid literal for int() with base 10: ‘10.5’
那我们该如何避免报错呢?
Python为我们提供了“try”模块:
try:
# 尝试
except:
# 如果报错,那么
当在进行try测试时,如果不报错,我们也另可执行代码。只需增添else。
try:
# 尝试
except:
# 如果报错,那么
else:
# 如果不报错,那么
那么我们就可以使用try了:
a = input("请输入一个整数:")
def int_a(a):
# 定义函数以在错误的时候循环
try:
# “try”关键字里,我们想执行的全部代码都会进行尝试
int(a)
pass
except:
# 如果错误,那么重新输入并再次判断
b = input("输入的数错误,请重新输入!")
int_a(b)
pass
else:
# 如果没有报错,继续执行代码
a = int(a)
print("你输入的数+10后等于",a+10)
pass
return
int_a(a) # 运行代码
输入字母或小数,Python会提醒我们重新输入:
请输入一个整数:a
输入的数错误,请重新输入!10.5
输入的数错误,请重新输入!9
你输入的数+10后等于 19
我们还可以编译这样的代码:
a = input("请输入一个数或一条算式:")
a = eval(a)
print("这个数(或算式的结果)等于",a)
输入一个整数:
请输入一个数或一条算式:9
这个数(或算式的结果)等于 9
输入一个小数:
请输入一个数或一条算式:2.5
这个数(或算式的结果)等于 2.5
在输入一条算式:
请输入一个数或一条算式:3*4
这个数(或算式的结果)等于 12
可当你输入出错时,Python会给你严重的一击:
请输入一个数或一条算式:wwww
Traceback (most recent call last):
File “main.py”, line 2, in <module>
a = eval(a)
File “<string>”, line 1, in <module>
NameError: name ‘wwww’ is not defined
或者你输入了标点:
请输入一个数或一条算式:。。。。
Traceback (most recent call last):
File “C:\Users\ASUS\学而思直播\code\cache\asset\6/main.py”, line 34, in <module>
a=eval(a)
File “<string>”, line 1
。。。。
^
SyntaxError: invalid character in identifier
这时你会发现一个报的是“NameError” (名字错误),另一个报的是“SyntaxError” (语法错误),当你想区分两种情况时,如果单独使用try-except-else,所有报错都是一种情况,这可真让人头疼。
但Python为我们提供了一个解决办法:
try:
# 判断语句
except *******: # 添加报错类型,比如ValueError、NameError、SyntaxError等
# 报错时执行
else:
# 不报错时执行
这样我们便可以设置了:
(注:假如你输入的错误值正好等于你设置的变量名,那么虽然不会报错,但也达不到我们想要的效果。并且输入三个小数点会变成省略号。所以需要增添两层判断)
a = input("请输入一个数或一条算式:") # 输入a
def eval_a(a):
# 定义函数以在错误时循环
try:
# 尝试把变量a转化成数值
eval(a)
pass
except NameError:
# 如果报名字错误,那么重新输入
b = input("\033[31m请不要输入字母或汉字!\033[0m")
eval_a(b)
pass
except SyntaxError:
# 如果报语法错误,那么重新输入
b = input("\033[31m请不要输入标点符号!\033[0m")
eval_a(b)
else:
# 如果不报错
a = eval(a)
if a == 'a':
# 如果变量a等于字符‘a’(这个错误无法被NameError发现)
b = input("\033[31m请不要输入字母!\033[0m")
eval_a(b)
pass
elif a == Ellipsis:
# 如果变量a等于Ellipsis省略号(这个错误无法被SyntaxError发现)
b = input("\033[31m请不要输入省略号!\033[0m")
eval_a(b)
pass
else:
# 否则,一切正常,按计划实行
print("这个数(或算式的结果)等于",a)
pass
pass
return
eval_a(a) # 运行函数
开始测试:
请输入一个数或一条算式:…
请不要输入省略号!
assd
请不要输入字母或汉字!
a
请不要输入字母!
。。。。
请不要输入标点符号!
4
这个数(或算式的结果)等于 4
总结:
当我们在Python程序运行时遇到了报错情况,可以使用try模块:
try:
# 判断语句
except *******: # 添加报错类型,比如ValueError、NameError、SyntaxError等
# 报错时执行
else:
# 不报错时执行