📜  错误与缺陷 (1)

📅  最后修改于: 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 等,那么就会删除系统中重要的文件,导致系统受到威胁。