"有人说梅花香自苦寒来,我却偏爱它凌寒绽放时的絮语——那些关于生活的温柔,关于情感的细语。我是小梅,随心而走,与你分享这些小确幸。"[root@localhost py]# cat -n jisuanqi.py 1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 def calculator(): 4 try: 5 num1 = float(input("输入第一个数字:")) 6 operator = input("输入运算符(+, -, *, /):") 7 num2 = float(input("输入第二个数字:")) 8 9 if operator == "+": 10 print(f"结果:{num1 + num2}") 11 elif operator == '-': 12 print(f"结果:{num1 - num2}") 13 elif operator == '*': 14 print(f"结果:{num1 * num2}") 15 elif operator == '/': 16 if num2 != 0: 17 print(f"结果:{num1 / num2}") 18 else: 19 print("错误:除数不能为零!") 20 else: 21 print("无效运算符!") 22 except ValueError: 23 print("错误:请输入数字!") 24 25 calculator()
1、计算23+4输出结果:
[root@localhost py]# python3 jisuanqi.py 输入第一个数字:23输入运算符(+, -, *, /):+输入第二个数字:4 结果:27.0
2、计算4-2输出结果:
[root@localhost py]# python3 jisuanqi.py 输入第一个数字:4输入运算符(+, -, *, /):-输入第二个数字:2结果:2.0
3、计算5*5输出结果:
[root@localhost py]# python3 jisuanqi.py 输入第一个数字:5输入运算符(+, -, *, /):*输入第二个数字:5结果:25.0
4、计算14/2输出结果:
[root@localhost py]# python3 jisuanqi.py 输入第一个数字:14输入运算符(+, -, *, /):/输入第二个数字:2结果:7.0
5、计算除数为0输出结果:
[root@localhost py]# python3 jisuanqi.py 输入第一个数字:12输入运算符(+, -, *, /):/输入第二个数字:0错误:除数不能为零!
6.计算0除以2输出结果:
[root@localhost py]# python3 jisuanqi.py 输入第一个数字:0输入运算符(+, -, *, /):/输入第二个数字:2结果:0.0
7.运算符异常输出结果:
[root@localhost py]# python3 jisuanqi.py 输入第一个数字:23输入运算符(+, -, *, /):lj输入第二个数字:23无效运算符!
8.输入非数字输出结果:
[root@localhost py]# python3 jisuanqi.py 输入第一个数字:asd错误:请输入数字!
这段Python代码定义了一个简单的计算器函数calculator(),使用try-except结构进行异常处理。下面分步骤解析:
1. try的作用
try是Python异常处理机制的关键字,用于包裹可能引发异常的代码块。当try块内的代码执行时:
如果代码正常执行(无异常),则跳过对应的except块如果代码引发异常(如类型错误、除零错误等),程序会立即中断try块的执行,跳转到匹配的except块处理异常
在代码中,try包裹了以下可能出错的步骤:
num1 = float(input("输入第一个数字: ")) # 可能引发ValueErroroperator = input("输入运算符 (+, -, *, /): ")num2 = float(input("输入第二个数字: ")) # 可能引发ValueError
2. except ValueError:的作用
这是异常处理的具体实现:
ValueError是Python内置异常类型,表示参数类型正确但值不合法
当float()函数无法将用户输入的字符串转换为浮点数时(如输入"abc"),会抛出ValueError
except ValueError:会捕获这个异常,并执行对应的错误处理代码:
print("错误:请输入数字!")
3.关键设计亮点
输入验证:通过float()转换确保输入是数字,配合except ValueError处理非数字输入
除零保护:在除法运算前显式检查num2 != 0,避免ZeroDivisionError
运算符验证:通过if-elif结构确保只处理四种有效运算符
错误隔离:将用户输入和运算逻辑放在try块,错误处理放在except块,符合异常处理最佳实践
4.扩展建议
如果需要增强这个计算器,可以考虑:
# 添加更多运算符elif operator == '^': print(f"结果: {num1 ** num2}")# 添加循环支持连续计算while True: calculator() if input("继续?(y/n)") == 'n': break
这种try-except结构在Python中被称为EAFP(Easier to Ask for Forgiveness than Permission)编程风格,是处理可能异常的标准方式,比先检查再操作(LBYL)更符合Python的哲学。