如何在 python 中组合多个 except 语句
How to combine multiple except statements in python
我捕获了 3 个不同的异常,错误在所有异常中的处理方式都不同,如下所示。
except IntegrityError as e:
error_objects.append(
{
"Row Number": index + 1,
"Error": parse_integrity_error(e),
"data": user_given_data,
}
)
except ValidationError as e:
error_objects.append(
{
"Row Number": index + 1,
"Error": e.detail[0],
"data": user_given_data,
}
)
except Exception as e:
error_objects.append(
{
"Row Number": index + 1,
"Error": str(e),
"data": user_given_data,
}
)
有clean/neat/pythonic方法吗?
由于所有异常处理程序都做同样的事情,只是它们将异常对象转换为字符串的方式有所不同,因此您可以向每个自定义异常添加一个 __str__
方法 类 (IntegrityError
和 ValidationError
在您的示例中)以便它们的实例可以通过对 str
函数的调用一致地格式化,就像您将常规 Exception
对象转换为字符串:
class IntegrityError(Exception):
def __str__(self):
return parse_integrity_error(self)
class ValidationError(Exception):
def __str__(self):
return self.detail[0]
try:
...
except Exception as e:
error_objects.append(
{
"Row Number": index + 1,
"Error": str(e),
"data": user_given_data,
}
)
我会像这样在一个函数(甚至是函数外的字典)中注册异常(这是一个例子):
def exception_return_value(e):
type_e = type(e)
if type_e == IndexError:
error = 'IndexError Value'
elif type_e == ValueError:
error = 'ValueError Value'
else:
error = 'Exception Error'
return {"Row Number": 10, "Error": error, "data": 20}
try:
raise ValueError()
except (IndexError, ValueError, Exception) as e:
return_value = exception_return_value(e)
print(return_value)
因为我没有你的代码,所以我无法 运行,但你可以像这样重写它:
def exception_return_value(e):
type_e = type(e)
if type_e == IntegrityError:
error = parse_integrity_error(e)
elif type_e == ValidationError:
error = e.detail[0]
else:
error = str(e)
return {"Row Number": index + 1, "Error": error, "data": user_given_data}
try:
...
except (IntegrityError, ValidationError, Exception) as e:
return_value = exception_return_value(e)
error_objects.append(return_value)
我捕获了 3 个不同的异常,错误在所有异常中的处理方式都不同,如下所示。
except IntegrityError as e:
error_objects.append(
{
"Row Number": index + 1,
"Error": parse_integrity_error(e),
"data": user_given_data,
}
)
except ValidationError as e:
error_objects.append(
{
"Row Number": index + 1,
"Error": e.detail[0],
"data": user_given_data,
}
)
except Exception as e:
error_objects.append(
{
"Row Number": index + 1,
"Error": str(e),
"data": user_given_data,
}
)
有clean/neat/pythonic方法吗?
由于所有异常处理程序都做同样的事情,只是它们将异常对象转换为字符串的方式有所不同,因此您可以向每个自定义异常添加一个 __str__
方法 类 (IntegrityError
和 ValidationError
在您的示例中)以便它们的实例可以通过对 str
函数的调用一致地格式化,就像您将常规 Exception
对象转换为字符串:
class IntegrityError(Exception):
def __str__(self):
return parse_integrity_error(self)
class ValidationError(Exception):
def __str__(self):
return self.detail[0]
try:
...
except Exception as e:
error_objects.append(
{
"Row Number": index + 1,
"Error": str(e),
"data": user_given_data,
}
)
我会像这样在一个函数(甚至是函数外的字典)中注册异常(这是一个例子):
def exception_return_value(e):
type_e = type(e)
if type_e == IndexError:
error = 'IndexError Value'
elif type_e == ValueError:
error = 'ValueError Value'
else:
error = 'Exception Error'
return {"Row Number": 10, "Error": error, "data": 20}
try:
raise ValueError()
except (IndexError, ValueError, Exception) as e:
return_value = exception_return_value(e)
print(return_value)
因为我没有你的代码,所以我无法 运行,但你可以像这样重写它:
def exception_return_value(e):
type_e = type(e)
if type_e == IntegrityError:
error = parse_integrity_error(e)
elif type_e == ValidationError:
error = e.detail[0]
else:
error = str(e)
return {"Row Number": index + 1, "Error": error, "data": user_given_data}
try:
...
except (IntegrityError, ValidationError, Exception) as e:
return_value = exception_return_value(e)
error_objects.append(return_value)