Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改用户定义函数的错误类型_Python_Error Handling - Fatal编程技术网

Python 更改用户定义函数的错误类型

Python 更改用户定义函数的错误类型,python,error-handling,Python,Error Handling,是否存在捕获错误并将其作为不同错误提出的场景。例如,如果我有一个从excel文件读取工作表的函数: 作为pd进口熊猫 从xlrd导入XLRDError def读卡页,路径: 尝试: printReading{}sheet.formatsheet 返回pd.read\u excelpath,sheet\u name=sheet 除XLR错误外: raise ValueErrorSheet{0}不在{1}中。formatsheet,路径 我的想法是,这会导致函数电子表格中的sheet变量出现值错误。

是否存在捕获错误并将其作为不同错误提出的场景。例如,如果我有一个从excel文件读取工作表的函数:

作为pd进口熊猫 从xlrd导入XLRDError def读卡页,路径: 尝试: printReading{}sheet.formatsheet 返回pd.read\u excelpath,sheet\u name=sheet 除XLR错误外: raise ValueErrorSheet{0}不在{1}中。formatsheet,路径 我的想法是,这会导致函数电子表格中的sheet变量出现值错误。将此错误保留为XLRDError是否更合适,即

except XLRDError:
       raise XLRDError("message")
也许最后一个更普遍的想法是,执行这种异常处理是否是惯用的python?相反,让函数pd.read_excel处理并引发错误是否更好,例如:

def读卡页,路径: 让read_excel函数执行任何错误处理。 返回pd.read\u excelpath,sheet\u name=sheet 一般来说,是的,调用函数比被调用函数更了解可能出现的错误

例如,假设您正在使用Pyspark阅读拼花地板档案。碰巧,如果您试图读取一个空文件夹,Pyspark将引发AnalysisException,抱怨它无法推断拼花地板模式,必须手动指定

如果您知道这是最可能的原因,那么可以捕获错误并提出一个不同的、更具描述性的错误,或者使用raisex from Y语法来保留回溯

另一方面,您应该非常确定您已经处理了所有发生此类异常的情况。考虑以下情况:

def my_sum(a, b):
    return a + b

try:
    my_sum(1, 'one')

except TypeError:
    raise TypeError('Unsupported addition operation!')
这里,引发并捕获了由于尝试添加两个未定义加法的对象而产生的TypeError。但是,以下代码也会引发TypeError,但回溯没有意义:

>>> my_sum(1)
TypeError: Unsupported addition operation!

这是一个完全不同的类型错误:一个由错误数量的参数引起的错误。这种错误的异常处理可能会妨碍调试。

比如,您知道这是业务异常,并且您有用于业务相关错误的通用处理程序。重点是pd.read\u excel不知道异常的层次结构。。。