DAY25

知识点回顾:

  1. 异常处理机制
  2. debug过程中的各类报错
  3. try-except机制
  4. try-except-else-finally机制

在即将进入深度学习专题学习前,我们最后差缺补漏,把一些常见且重要的知识点给他们补上,加深对代码和流程的理解。

作业:理解今日的内容即可,可以检查自己过去借助ai写的代码是否带有try-except机制,以后可以尝试采用这类写法增加代码健壮性。

1. SyntaxError (语法错误)

原因: 代码不符合 Python 的语法规则,解释器在尝试解析代码时就会失败。这种错误在程序 运行之前 就会被检测到。

输入:

x = 5 +
print (x)

输出:

Cell In[3], line 1
    x = 5 +
           ^
SyntaxError: invalid syntax

+作为二元运算符,需要左右两边都有操作数,但此语句中+的右边没有任何内容。

输入:

def my_function()
    print("Hello")

输出:

Cell In[4], line 1
    def my_function()
                     ^
SyntaxError: invalid syntax

Python 借助冒号和缩进来划分代码块。函数定义、循环、条件语句等结构都需要以冒号结尾,并且它们的主体部分要使用相同的缩进量(一般是 4 个空格)。

改:

def my_function():  # 注意这里添加了冒号
    # 函数体部分(使用缩进来表示)
    print("这是一个函数")
    # 更多代码...

# 调用函数
my_function()

2. NameError (名称错误)

原因: 尝试使用一个未被定义的变量、函数或对象的名称。

输入:

# 示例 a: 变量未定义
# print(some_undefined_variable)

# 示例 b: 打错变量名
# print(my_lisst) # 变量名拼写错误

3. TypeError (类型错误)

原因: 对一个不支持该操作的数据类型执行了某个操作或函数。

输入:

# print("Age: " + 25) # 字符串和整数
# my_number = 10
# my_number() # 尝试像函数一样调用一个整数

输出:

TypeError                                 Traceback (most recent call last)
Cell In[6], line 1
----> 1 print("Age: " + 25) # 字符串和整数
      2 my_number = 10
      3 my_number()

TypeError: can only concatenate str (not "int") to str

改:

print("Age: " + str(25))  # 把整数转换为字符串
print(f"Age: {25}")        # 利用 f-string 进行格式化(推荐方式)
my_number = 10
print(my_number)  # 直接使用变量

①在拼接之前,使用str()函数把整数转换为字符串,或者采用 f-string 这种更简洁的格式化方式;

②只有函数或者实现了__call__方法的对象才可以被调用。整数属于不可调用的对象,对其使用括号进行调用会引发TypeError解决办法:明确变量的用途,不要对不可调用的对象使用括号进行调用。

4. ValueError (值错误)

原因: 函数接收到的参数类型正确,但其值不合适或无效。

输入:

 my_string = "12.34.56"
 number = float(my_string) # '12.34.56' 不是一个有效的浮点数表示

输出:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[1], line 2
      1 my_string = "12.34.56"
----> 2 number = float(my_string)

ValueError: could not convert string to float: '12.34.56'

改:

#改:
my_string = "12.34.56"
parts = my_string.split('.')  # 分割为 ['12', '34', '56']
numbers = [float(part) for part in parts]  # 转换为浮点数列表
print(numbers)  # 输出: [12.0, 34.0, 56.0]

还有索引、键、属性、读取路径错误等。

用 try - except- else -fiinally 
- try: 包含可能引发异常的代码。
- except: 处理在 try 块中发生的特定异常。
- else: (可选)如果 try 块中没有发生任何异常,则执行此代码块。
- finally: (可选)无论 try 块中是否发生异常,总会执行此代码块。

为什么使用 else?
1. 清晰性: 它清楚地将“主要尝试的操作(可能出错)”与“操作成功后的后续步骤”分开。
2. 避免意外捕获: 如果把“成功后的后续步骤”也放在 try 块里,而这些步骤本身也可能引发 try 块想要捕获的同类型异常,那么就会导致逻辑混淆。else 块中的代码不会被同一个 try 块的 except 子句捕获。

@@浙大疏锦行

你可能感兴趣的:(Python打卡训练营内容,python)