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

在编程中,计算带有条件的求和,可以根据使用的编程语言和数据结构选择合适的方法。以下是几种常见的解决方法,分别适用于 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 查询是最佳方法。

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

作者:q56731523原文地址:https://blog.csdn.net/weixin_44617651/article/details/144365678

%s 个评论

要回复文章请先登录注册