首页 前端知识 如何在 Python 代码中抛出异常

如何在 Python 代码中抛出异常

2025-02-25 13:02:30 前端知识 前端哥 893 451 我要收藏

在编程中,计算带有条件的求和,可以根据使用的编程语言和数据结构选择合适的方法。以下是几种常见的解决方法,分别适用于 Python 和其他常用场景:

在这里插入图片描述

1、问题背景

有一段 Python 代码,其目的是从一个Excel文件中读取数据,然后执行一些操作。但是,在执行过程中遇到了一个问题:无法在代码中抛出异常。这意味着,当代码遇到错误时,不会打印出错误信息,导致调试困难。

2、解决方案

Step 1:确保异常被捕获

在 Python 中,异常是通过 tryexceptraise 关键字来处理的。try 块包含要执行的代码,except 块包含要捕获的异常类型,raise 用于抛出异常。

在这段代码中,try 块包含了所有代码,但是没有 except 块来捕获异常。因此,当代码遇到错误时,没有相应的异常处理逻辑,导致无法打印出错误信息。

Step 2:在适当的地方添加 except

为了能够捕获异常并打印出错误信息,需要在代码中添加 except 块。except 块应该放在 try 块的后面,用于捕获 try 块中抛出的异常。

在修改后的代码中,在 try 块后面添加了 except 块,并使用了通配符 Exception 来捕获所有类型的异常。当代码遇到错误时,会进入 except 块,并打印出异常信息。这样,就可以看到错误信息,并方便调试。

Step 3:使用 raise 来抛出异常

在某些情况下,可能需要在代码中抛出异常,以便在其他地方处理异常。可以使用 raise 关键字来抛出异常。raise 后面可以跟异常类型和异常信息。

例如,在上面的代码中,如果源路径不存在,则会抛出 FileNotFoundError 异常,并打印出异常信息。这样,在其他地方就可以捕获到这个异常,并进行相应的处理。

代码示例

from xlutils.copy import copy
from xlrd import open_workbook
import xlwt
import os
import shutil
import glob

def openexcel_main():
    book = open_workbook('input.xls', formatting_info=True)
    sheet = book.sheet_by_index(0)
    wb = copy(book)
    w_sheet = wb.get_sheet(0)
    folder_name = ['do_not_delete', 'internal_builds']
    for j in range(0, 2):
        folder = folder_name.pop()
        for i in range(1, (sheet.nrows)):
            cell_test_group = sheet.cell(i, 0)
            data = str(cell_test_group.value)
            print('#####################################')
            print(data)
    list = []
    source_path = '/mnt/' + folder + '/pybuild/' + data + '/MAIN/'
    if os.path.exists(source_path):
        try:
            os.chdir(source_path)
            all_subdirs = [d for d in os.listdir('.') if os.path.isdir(d)]
            for dirs in all_subdirs:
                dir = os.path.join('/mnt/' + folder + '/pybuild/' + data + '/MAIN/', dirs)
                os.chdir(dir)
                current = os.getcwd()
                new = str(current).split("/")[6]
                list.append(new)
            list.sort()
            val = list
            for i in range(1, 4):
                if val == []:
                    break
                else:
                    print(i)
                current_build_number = val.pop()
                print('Current_Build:' + current_build_number)
                source_path_copy = r"" + source_path + "/" + current_build_number + "/"
                print('Copying From:' + source_path_copy)
                dest_path = r"/home/builds_repo/" + folder + "/pybuild/" + data + "/MAIN/" + current_build_number + "/"
                os.chdir(source_path_copy)
                file_name = (glob.glob('*[_bin].*')).pop()
                print('File_Copied:' + file_name)
                if not os.path.exists(dest_path):
                    os.makedirs(dest_path)

                shutil.copyfile(source_path_copy + file_name, dest_path + file_name)
        except Exception as e:  # Use Exception if not sure which exception will raise
            print('File Not Found ..', e)
    else:
        raise FileNotFoundError('Source path does not exist')

def main():
    openexcel_main()


if __name__ == '__main__':
    main()

总结

  • 小规模数据:列表推导式和 filter 是首选。
  • 分组和条件defaultdictpandas 是优选。
  • 大规模数据numpypandas 提供高效解决方案。
  • 数据库存储数据:SQL 查询是最佳方法。

根据数据的规模和场景选择合适的方式可以提高代码效率和可读性。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/21472.html
标签
评论
发布的文章

python调用ollama库详解

2025-02-25 13:02:30

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!