📅  最后修改于: 2023-12-03 15:28:34.570000             🧑  作者: Mango
程序员最不愿意遇到的就是错误和缺陷。一旦程序出现了错误和缺陷,那么就需要大量的时间和精力去修复和调试。
错误是指程序中的语法问题或者逻辑问题,会导致程序无法正常执行或者执行结果与期望不符。
语法错误是指程序中违反了语法规则,导致编译器无法正确识别并编译代码的问题。比如缺少分号、括号不匹配、变量未声明等问题。
# 缺少分号
print("Hello World")
print("Hello Python")
# 编译报错:SyntaxError: invalid syntax
print("Hello World")
print("Hello Python")
逻辑错误是指程序中的算法或者数据结构问题,导致程序的输出结果与期望不符合。比如算法错误、数据类型转换错误、变量赋值错误等问题。
# 算法错误
def sum(n):
result = 0
for i in range(n):
result += i # 错误:应为 result += i+1
return result
print(sum(10))
# 输出结果:45(错误结果)
# 期望结果:55
# 数据类型转换错误
def convert(num):
if isinstance(num,str):
return int(num)
print(convert("123"))
# 输出结果:123
print(convert("abc"))
# 报错:ValueError: invalid literal for int() with base 10: 'abc'
# 变量赋值错误
def count_down():
i = 10
while i > 0:
i -= 1 # 错误:应为 i -= 2
print(i)
count_down()
# 输出结果:9876543210(错误结果)
缺陷是指程序中的不足或者错误设计的问题,会导致程序的质量低下或者不稳定。
设计缺陷是指程序设计方案的问题,会导致程序难以扩展、维护困难或者代码复杂度高。比如设计模式不匹配、抽象层次过多或者过少、单一职责原则被破坏等问题。
# 单一职责原则被破坏
class Car:
def run(self):
print("汽车正在行驶...")
def wash(self):
print("汽车正在洗车...")
car = Car()
car.run()
# 输出结果:汽车正在行驶...
car.wash()
# 输出结果:汽车正在洗车...
# 如果需要添加更多的功能,比如加油、维修等,那么就需要在 Car 类中添加更多的方法,并且每个方法都可能会影响其他方法的执行结果,代码的复杂度会不断增加。
维护缺陷是指程序在使用、维护、修改过程中出现的问题,会导致程序的稳定性下降、安全性受到威胁或者功能受到限制。比如低效率、内存泄漏、死循环、安全漏洞等问题。
# 内存泄漏
def read_file(file):
with open(file,"r") as f:
return f.read()
while True:
data = read_file("test.txt")
# ...
# 如果程序一直不停的运行,那么会反复读取文件内容,并且读取的内容不会被垃圾回收器回收,最终会导致内存的占用越来越大,程序的运行速度变得越来越慢。
# 安全漏洞
import os
def delete_file(file_name):
os.remove(file_name)
file_name = input("请输入要删除的文件名:")
delete_file(file_name)
# 如果用户输入恶意代码,比如 ../../../etc/passwd 等,那么就会删除系统中重要的文件,导致系统受到威胁。