小编GoB*_*ear的帖子

在Python中使用装饰器处理异常

我正在使用 django 框架编写一个应用程序,并正在考虑编写类似休息控制器的东西,因为将异常处理逻辑保留在一个地方似乎是一个好主意。我不知道执行此操作的正确方法是什么,但我想出了一个装饰器,其中包含一堆可能由各种方法引发的异常,因此,每个方法都使用该装饰器。

def exception_handler(function):
    def wrapper(*args, **kwargs):
        try:
            return function(*args, **kwargs)
        except Error1 as error:
            return Response(
                {"Error": str(error)},
                status=status.HTTP_400_BAD_REQUEST
            )
        except Error2 as error:
            return Response(
                {"Error": str(error)},
                status=status.HTTP_404_NOT_FOUND
            )
        except Error3 as error:
            return Response(
                {"Error": str(error)},
                status=status.HTTP_503_SERVICE_UNAVAILABLE
            )
     return wrapper
Run Code Online (Sandbox Code Playgroud)

其中Error1Error2Error3只是一些抽象错误。在我的应用程序中确实有更多这样的情况。

简单的控制器(又名 django 视图)可能看起来像这样:

class DeviceView(viewsets.ModelViewSet):
    lookup_field = 'id'
    serializer_class = DeviceSerializer

    @exception_handler
    def create(self, request):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save(data=request.data)
        return Response(status=status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)

因此,基本上,如果抛出任何异常,都会以适当的方式进行处理。我在这里看到的问题之一是,如果不是我提出带有所需消息的异常:

if some_condition:
    raise SomeException("Something happened")
Run Code Online (Sandbox Code Playgroud)

这将是默认的,我通常更愿意更改它。因此,我开始对控制向客户显示哪些消息感到有些不舒服。我现在能想到的最好的办法是: …

python

6
推荐指数
1
解决办法
2204
查看次数

如何使用xlsx npm库将嵌套的json对象转换为excel表?

我有一个嵌套的json对象。为了简单起见:

data = {'key1': 1, 'key2': 2, 'key3': {'nestedKey1': 3, 'nestedKey2': 4}}
Run Code Online (Sandbox Code Playgroud)

一个真实的对象更大,但要点是它是一个嵌套的对象。值可以是字符串,数字或其他对象。现在,我需要获取一个excel表(对于此特定的json如下所示):

|----------------------------------------
| key1 | key2 |           key3          |
|      |      |--------------------------
|      |      | nestedKey1 | nestedKey2 |
|----------------------------------------
|  1   |  2   |     3      |      4     |
|----------------------------------------
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,我尝试使用xlsx库。我导入库,如下所示:

import { WorkSheet, WorkBook, utils, writeFile } from 'xlsx';
Run Code Online (Sandbox Code Playgroud)

在我的方法中,我定义了对象:

let myObj = {'key1': 1, 'key2': 2, 'key3': {'nestedKey1': 3, 'nestedKey2': 4}}
Run Code Online (Sandbox Code Playgroud)

然后创建一个工作表和工作簿:

const workSheet: WorkSheet = utils.json_to_sheet([myObj]);
const workBook: WorkBook = utils.book_new();
utils.book_append_sheet(workBook, workSheet, 'object_to_save');
Run Code Online (Sandbox Code Playgroud)

最后将其写入文件: …

javascript xlsx angular sheetjs

6
推荐指数
1
解决办法
980
查看次数

标签 统计

angular ×1

javascript ×1

python ×1

sheetjs ×1

xlsx ×1