【问题标题】:How to hide tracebacks for users when an import csv fail using django import export library使用 django 导入导出库导入 csv 文件时如何为用户隐藏回溯
【发布时间】:2019-07-26 17:11:52
【问题描述】:

我已经在我的应用中成功实现了导入和导出。我唯一不能做的就是在导入失败时隐藏用户的回溯。

到目前为止我已经尝试过:

raise_errors = False in admin.py
.traceback{display:none} in import.css
DEBUG = False in settings.py

我故意在 csv 文件中以列名开头的错误数据,我总是每行得到这个:

§  Line number: 1 - "Column 'my_error' not found in dataset. Available columns are: ['column1', 'column2', 'my_err', 'column3']"

row1data1, row1data2, row1data3, 0

Traceback (most recent call last):
File "C:\Users\my_user\.virtualenvs\my_project-gu-pxuzP\lib\site-packages\import_export\fields.py", line 63, in clean
value = data[self.column_name]
KeyError: 'my_error'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\my_user\.virtualenvs\my_project-gu-pxuzP\lib\site-packages\import_export\resources.py", line 492, in import_row
instance, new = self.get_or_init_instance(instance_loader, row)
File "C:\Users\my_user\.virtualenvs\my_project-gu-pxuzP\lib\site-packages\import_export\resources.py", line 269, in get_or_init_instance
instance = self.get_instance(instance_loader, row)
File "C:\Users\my_user\.virtualenvs\my_project-gu-pxuzP\lib\site-packages\import_export\resources.py", line 263, in get_instance
return instance_loader.get_instance(row)
File "C:\Users\my_user\.virtualenvs\my_project-gu-pxuzP\lib\site-packages\import_export\instance_loaders.py", line 32, in get_instance
params[field.attribute] = field.clean(row)
File "C:\Users\my_user\.virtualenvs\my_project-gu-pxuzP\lib\site-packages\import_export\fields.py", line 66, in clean
"columns are: %s" % (self.column_name, list(data)))
KeyError: "Column 'my_erro' not found in dataset. Available columns are: ['column1', 'column2', 'my_error', 'column4']"

我怎样才能只得到消息的第一行?:

§  Line number: 1 - "Column 'my_error' not found in dataset. Available columns are: ['column1', 'column2', 'my_err', 'column3']"

row1data1, row1data2, row1data3, 0

谢谢!

【问题讨论】:

    标签: python django python-3.x django-import-export


    【解决方案1】:

    您只需要捕获错误并仅打印错误,然后退出,如果您 想。 (假设 Python3)

    try:
        value = data[self.column_name]
    except KeyError as e:
        print("An error occurred: {}".format(e))
        # or perhaps some other action.
    

    任何未被捕获和处理的异常都会产生堆栈跟踪,因为它假定它是无意的。您需要考虑代码的不同部分可能会生成哪些异常,并决定是否要以不同的方式将它们呈现给用户。

    【讨论】:

    • 我明白你在说什么。我必须考虑如何在fields,py中覆盖Fields类中的clean方法。我认为有像raise_errors = False 这样的直截了当的方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多