javascript

java

python

c#

android

c++

node.js

php

reactjs

jquery

html

css

ios

.net

git

ruby-on-rails

sql

c

string

ruby

使用Python和Flask返回API错误消息

我正在使用Python和Flask设计RESTful API。 如预期的那样,如果一切顺利,则API需要接收API请求并返回数据,但是在发生错误的情况下,它需要轻柔地失败并返回正确的错误。 我通常会在发生错误时引发异常,但是在这种情况下,我需要将错误消息返回给用户(try-catch块?)。

我目前处理错误的方法是让函数返回数据和错误,并在每个级别检查数据,最后将数据或错误返回给API函数的调用者。

问题在于,当存在多个级别的函数调用时,它会变得很麻烦,要求我的函数多次传递数据和错误,并每次执行检查。

有一个更好的方法吗? 我可以做些什么改进以使错误传播更加简单和优雅?

这是我目前返回错误的方式的示例:

def get_data()
    data1, error = get_some_data() # function not shown
    if data1 is None:
         return None, "could not retrieve data1"
    data2, error = get_some_other_data() # function not shown
    if data2 is None:
         return None, "could not retrieve data2"
    return (data1, data2), None

@app.route("/api/method", methods=['GET'])
def method():
    data, error = get_data()
    if data is None:
        if error is None:
            error = "unknown error"
        return json.dumps({ "error": error }), 500
    return json.dumps({ "data": data }), 200
trans by 2020-07-12T09:31:09Z

错误处理-使用redirect_to后如何停止控制器执行? (使用Rails)

我有一个控制器,该控制器具有多个将:year和:month用作的动作URL中的属性。 我做了一个私有方法check_date检查日期是否有效,并检查日期是否将来。

def check_date(year, month)
  if month < 1 || month > 12 || year < 2000
    flash[:notice] = I18n.t 'archive.invalid_date'
    redirect_to :action => 'index'
  elsif year > Date.today.year || (year == Date.today.year && month > Date.today.month)
    flash[:notice] = I18n.t 'archive.no_future'
    redirect_to :action => 'month_index', 
      :year => Date.today.year, 
      :month => Date.today.month,
      :type => params[:type]
  end
end

有没有一种方法可以在结束后结束控制器执行redirect_to?

我能想到的方法是在redirect_to之后引发异常,或者从check_date返回值并在调用它的每个操作中对其进行检查-类似于

def month_index 
  year = params[:year].to_i
  month = params[:month].to_i
  if !check_date(year, month)
    return
  ...
end

但是我想知道是否有一些不错的方法可以做到这一点。 我一半了希望调用过redirect_to rails可以识别出我想要停下来,但这似乎没有发生。

trans by 2020-07-11T07:33:54Z

异常处理-在Golang中捕获恐慌

使用以下代码,如果未提供文件参数,则按预期对第9行os.Args[1]引发恐慌。

当直接传递引起恐慌的东西(os.Args[1])时,我如何才能“捕捉”此恐慌并进行处理? 类似于PHP中的try / catch或Python中的try / except。

我在此处在StackOverflow上进行了搜索,但没有找到任何能回答此类问题的内容。

package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Open(os.Args[1])
    if err != nil {
        fmt.Println("Could not open file")
    }
    fmt.Printf("%s", file)
}
trans by 2020-07-01T23:49:46Z

诊断R软件包生成警告:“创建PDF版本时出现LaTeX错误”

构建软件包时,我收到以下警告:

* checking PDF version of manual ... WARNING
LaTeX errors when creating PDF version.
This typically indicates Rd problems.

我什至不知道如何开始诊断这一点。 有没有工具可以告诉我问题所在的.rd文件?

在检查文档步骤中,我没有收到任何有关我的Rd文件的警告。

trans by 2020-06-27T19:32:21Z

使用window.on获取实际的Javascript错误对象

JavaScript具有出色的回调onerror。跟踪任何错误非常方便。 但是,它使用错误名称,文件名和行进行调用。 它肯定不如从try...catch语句获取实际的错误对象丰富。实际的错误对象包含更多数据,因此我尝试获取该数据。 不幸的是,当您开始使用异步代码时,try...catch语句无法正常工作。

有没有办法结合起来并充分利用两全其美的方法? 最初,我寻找一种方法来获取onerror块中触发的最后一个错误,但是JS似乎没有存储该错误。

有什么线索吗?

trans by 2020-06-26T10:36:17Z

javascript-如何在switch语句中使用instanceof

我使用自定义错误(es6-error)允许我根据其类来处理错误,如下所示:

import { DatabaseEntryNotFoundError, NotAllowedError } from 'customError';

function fooRoute(req, res) {
  doSomethingAsync()
    .then(() => {
      // on resolve / success
      return res.send(200);
    })
    .catch((error) => {
      // on reject / failure
      if (error instanceof DatabaseEntryNotFoundError) {
        return res.send(404);
      } else if (error instanceof NotAllowedError) {
        return res.send(400);
      }
      log('Failed to do something async with an unspecified error: ', error);
      return res.send(500);
    };
}

现在,我想对这种类型的流使用一个开关,结果是:

import { DatabaseEntryNotFoundError, NotAllowedError } from 'customError';

function fooRoute(req, res) {
  doSomethingAsync()
    .then(() => {
      // on resolve / success
      return res.send(200);
    })
    .catch((error) => {
      // on reject / failure
      switch (error instanceof) {
        case NotAllowedError:
          return res.send(400);
        case DatabaseEntryNotFoundError:
          return res.send(404);
        default:
          log('Failed to do something async with an unspecified error: ', error);
          return res.send(500);
      }
    });
}

instanceof不能那样工作。 因此后者失败了。

有什么方法可以在switch语句中检查实例的类吗?

trans by 2020-06-25T08:21:35Z

错误处理-为什么异常对于输入验证来说是如此糟糕?

我知道“例外是针对特殊情况的” [a],但是除了一遍又一遍地重复之外,我还没有找到这个事实的实际原因。

由于它们停止了执行,因此您不希望它们使用普通的条件逻辑是有道理的,但是为什么不输入验证呢?

假设您要遍历一组输入并捕获每个异常以将它们组合在一起以进行用户通知...我不断看到这是“错误的”,因为用户一直在输入错误的输入,但这似乎是基于 关于语义。

输入的不是预期的,因此是例外。 引发异常使我可以准确地定义问题所在,例如StringValueTooLong或IntegerValueTooLow或InvalidDateValue等等。 为什么认为这是错误的?

引发异常的替代方法是返回(并最终收集)错误代码,或更糟糕的是错误字符串。 然后,我要么直接显示这些错误字符串,要么解析错误代码,然后向用户显示相应的错误消息。 异常不会被视为可延展的错误代码吗? 当可以使用我的语言中已内置的异常功能将这些错误代码和消息概括起来时,为什么还要创建单独的错误代码和消息表?

另外,我发现Martin Fowler的这篇文章是关于如何处理这类事情的-通知模式。 我不确定如何将其视为除了不会停止执行的异常以外的其他任何东西。

答:我到处都读过有关异常的内容。

-编辑-

提出了许多伟大的观点。 我已对大多数内容进行了评论并提出了要点,但我尚未完全确信。

我并不是要提倡将异常作为解决输入验证的适当方法,但是我想找到充分的理由,为什么当大多数替代解决方案似乎只是变相中的异常时,这种做法被认为如此邪恶。

trans by 2020-06-22T17:33:44Z

bash-忽略Shell脚本中的特定错误

我有一小段shell脚本,有可能引发许多错误。 我已将脚本当前设置为全局停止所有错误。 但是,我希望此小节有所不同。

这是代码段:

recover database using backup controlfile until cancel || true; 
auto

我期望这最终会引发“找不到文件”错误。 但是我想继续执行此错误。 对于任何其他错误,我希望脚本停止。

实现此目标的最佳方法是什么?

Bash版本3.00.16

trans by 2020-06-21T08:19:55Z

c#-比多个捕获块更优雅的异常处理?

这个问题已经在这里有了答案:

  • 一次捕获多个异常?                                     28个答案

使用C#,是否有比一堆丑陋的catch块更好的方法来处理多种类型的异常?

对于这种情况,什么是最佳实践?

例如:

try
{
    // Many types of exceptions can be thrown
}
catch (CustomException ce)
{
    ...
}
catch (AnotherCustomException ace)
{
    ...
}
catch (Exception ex)
{
    ...
}
trans by 2020-02-22T19:31:27Z

的错误检查转换功能被认为是好吗?

我想要一种简单的方法来检查对象是否有效。 我想到了一个简单的转换函数,如下所示:

operator bool() const { return is_valid; }

现在检查它是否有效非常简单

// is my object invalid?
if (!my_object) std::cerr << "my_object isn't valid" << std::endl;

这是一个好习惯吗?

trans by 2020-02-13T22:02:08Z

调试-如何获取PHP以对错误进行回溯?

尝试使用默认的仅当前行错误消息调试PHP是可怕的。 产生错误时,如何使PHP产生回溯(堆栈跟踪)?

trans by 2020-02-12T20:51:47Z

PHP构造函数返回NULL

我有这个代码。 User对象构造函数是否有可能以某种方式失败,以便为$this->LoggedUser分配NULL值,并在构造函数返回后释放对象?

$this->LoggedUser = NULL;
if ($_SESSION['verbiste_user'] != false)
  $this->LoggedUser = new User($_SESSION['verbiste_user']);    
trans by 2020-02-02T08:49:45Z

ajax-如何在jQuery load()方法中捕获错误

我正在使用jQuery的load()方法来在用户单击按钮时检索一些数据。

加载成功完成后,我将在load()中显示结果。

问题是,有时在检索数据时会在load()中发生错误。

如何在load()中捕获错误?

trans by 2020-01-28T12:46:21Z

c#-基本控制器中的Asp.net mvc覆盖OnException继续传播到Application_E

我试图返回一个视图,而不根据应用程序中可能发生的某些错误向用户发出重定向,我想处理这些错误,并将其记录在我的基本控制器中,我不希望该错误传播到我的主机上 Global.asax-Application_Error()方法,因为我希望该方法处理我的应用程序内的任何其他错误,例如 用户输入虚假URL,是否有人找到解决方法?

注意:我已经留下了注释的代码,因为我有解决某些问题的方法,这也表明我有多个异常可以处理...

编辑:如果我在此OnException中发出RedirectToAction重写一切正常,但我只想返回视图并且没有重定向...

我的基本控制器方法是:

    protected override void OnException(ExceptionContext filterContext)
    {
        //dont interfere if the exception is already handled
        if (filterContext.ExceptionHandled)
            return;

        //let the next request know what went wrong
        filterContext.Controller.TempData["exception"] = filterContext.Exception;

        //log exception
        _logging.Error(User.Identity.Name, ExceptionHelper.BuildWebExceptionMessage(filterContext.Exception));


        //set up redirect to my global error handler
        //if (filterContext.Exception.GetType() == typeof(NoAccessException))
        //    filterContext.Result = View(new RouteValueDictionary
        //    (new { area = "", controller = "Error", action = "PublicError" }));

        //else {
        //Only return view, no need for redirection
        filterContext.Result = View(new RouteValueDictionary
        (new { area = "", controller = "Error", action = "NoAccess" }));
        //}
        //advise subsequent exception filters not to interfere and stop
        // asp.net from showing yellow screen of death
        filterContext.ExceptionHandled = true;

        //erase any output already generated
        filterContext.HttpContext.Response.Clear();

        //base.OnException(filterContext);
    }

此方法应该处理可能出现在我的应用程序中的任何其他错误,我不希望上述错误在Application_Error()内部处理

protected void Application_Error()
        {

            Exception exception = Server.GetLastError();
            // Log the exception.

            var logger = Container.Get<ILoggingService>();
            logger.Error(User.Identity.Name, ExceptionHelper.BuildWebExceptionMessage(exception));

            Response.Clear();

            HttpException httpException = exception as HttpException;

            RouteData routeData = new RouteData();
            routeData.Values.Add("controller", "Error");

            //if (httpException == null)
            //{
            routeData.Values.Add("action", "PublicError");
            //}
            //else //It's an Http Exception, Let's handle it.
            //{
            //    switch (httpException.GetHttpCode())
            //    {
            //        case 404:
            //            // Page not found.
            //            routeData.Values.Add("action", "HttpError404");
            //            break;
            //        case 500:
            //            // Server error.
            //            routeData.Values.Add("action", "HttpError500");
            //            break;

            //        // Here you can handle Views to other error codes.
            //        // I choose a General error template  
            //        default:
            //            routeData.Values.Add("action", "General");
            //            break;
            //    }
            //}

            // Pass exception details to the target error View.
            routeData.Values.Add("error", exception);

            // Clear the error on server.
            Server.ClearError();

            // Avoid IIS7 getting in the middle
            Response.TrySkipIisCustomErrors = true;

            // Call target Controller and pass the routeData.
            IController errorController = new ErrorController();
            errorController.Execute(new RequestContext(
                 new HttpContextWrapper(Context), routeData));
        }
trans by 2020-01-28T08:25:44Z

错误处理-如何在遇到致命异常时让php返回500?

PHP致命错误作为状态代码200返回到HTTP客户端。 如何使其返回状态代码500(内部服务器错误)?

trans by 2020-01-27T19:51:21Z

Windows-系统错误5启动.NET Servi时拒绝访问

当我尝试启动在Visual Studio中创建的服务时,出现以下错误:

System error 5 has occurred.

Access is denied.

我以提升的特权运行命令行,所以这不是问题。 我可以在任何地方查看发生什么错误。

trans by 2020-01-27T03:39:27Z

错误处理-PHP中变量名之前的'At'符号:@ $ _ POST

我已经看到函数调用之前带有at符号以关闭警告。 今天,我浏览了一些代码,发现了这一点:

$hn = @$_POST['hn'];

在这里有什么好处?

trans by 2020-01-25T17:55:20Z

解析-从C#打印堆栈跟踪信息

作为产品中某些错误处理的一部分,我们希望转储一些堆栈跟踪信息。 但是,我们体验到许多用户只会为错误消息对话框截图,而不是向我们发送该程序提供的完整报告的副本,因此,我想在此对话框中提供一些最少的堆栈跟踪信息。

我的计算机上的.NET堆栈跟踪如下所示:

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
at System.IO.StreamReader..ctor(String path)
at LVKWinFormsSandbox.MainForm.button1_Click(Object sender, EventArgs e) in C:\Dev\VS.NET\Gatsoft\LVKWinFormsSandbox\MainForm.cs:line 36

我有这个问题:

格式如下:

at <class/method> [in file:line ##]

但是,在at和in关键字中,我假设如果它们运行挪威语.NET运行时而不是我安装的英语时,它们将被本地化。

有什么办法让我以与语言无关的方式拆开堆栈跟踪,以便仅显示具有该条目的文件和行号?

换句话说,我想从上面的文本中获得以下信息:

C:\Dev\VS.NET\Gatsoft\LVKWinFormsSandbox\MainForm.cs:line 36

您可以提供的任何建议都会有所帮助。

trans by 2020-01-25T05:51:50Z

python-IndexError:数组的索引过多

我知道有很多这样的线程,但是所有这些线程都是用于非常简单的情况(例如3x3矩阵)之类的,解决方案甚至还没有开始应用于我的情况。 因此,我尝试绘制G与l1的关系图(这不是11,而是L1)。 数据在我从excel文件加载的文件中。 excel文件为14x250,因此有14个参数,每个参数包含250个数据点。 我有另一个用户(向休·博斯韦尔大喊大叫!)帮助我解决代码中的错误,但是现在又出现了另一个错误。

所以这是有问题的代码:

# format for CSV file:
header = ['l1', 'l2', 'l3', 'l4', 'l5', 'EI',
      'S', 'P_right', 'P1_0', 'P3_0',
      'w_left', 'w_right', 'G_left', 'G_right']

def loadfile(filename, skip=None, *args):
    skip = set(skip or [])
    with open(filename, *args) as f:
        cr = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
        return np.array(row for i,row in enumerate(cr) if i not in skip)
#plot data
outputs_l1 = [loadfile('C:\\Users\\Chris\\Desktop\\Work\\Python Stuff\\BPCROOM - Shingles analysis\\ERR analysis\\l_1 analysis//BS(1) ERR analysis - l_1 - P_3 = {}.csv'.format(p)) for p in p3_arr]

col = {name:i for i,name in enumerate(header)}

fig = plt.figure()
for data,color in zip(outputs_l1, colors):
    xs  = data[:, col["l1"     ]]
    gl = data[:, col["G_left" ]] * 1000.0    # column 12
    gr = data[:, col["G_right"]] * 1000.0    # column 13
    plt.plot(xs, gl, color + "-", gr, color + "--")
for output, col in zip(outputs_l1, colors):
    plt.plot(output[:,0], output[:,11]*1E3, col+'--')
plt.ticklabel_format(axis='both', style='plain', scilimits=(-1,1))
plt.xlabel('$l1 (m)$')
plt.ylabel('G $(J / m^2) * 10^{-3}$')
plt.xlim(xmin=.2)
plt.ylim(ymax=2, ymin=0)

plt.subplots_adjust(top=0.8, bottom=0.15, right=0.7)

运行整个程序后,我收到错误消息:

Traceback (most recent call last):
  File "C:/Users/Chris/Desktop/Work/Python Stuff/New Stuff from Brenday 8 26 2014/CD_ssa_plot(2).py", line 115, in <module>
    xs  = data[:, col["l1"     ]]
IndexError: too many indices for array

在遇到这个问题之前,我在上述错误消息所指的行的下方几行涉及:

Traceback (most recent call last): File "FILE", line 119, in <module> 
gl = data[:, col["G_left" ]] * 1000.0 # column 12 
IndexError: index 12 is out of bounds for axis 1 with size 12

我了解第一个错误,但是修复它时遇到了问题。 第二个错误对我来说却令人困惑。 我的老板真的在呼吸我的脖子,所以任何帮助将不胜感激!

trans by 2020-01-14T22:00:20Z

iPhone-由于出现一般错误,目前无法处理应用程序info.plist验证(1095)

我正在创建报亭应用程序。 该应用程序已准备就绪,现在我正尝试使用Application Loader在苹果商店中上传该应用程序。 上载zip文件时,将错误消息显示为

由于出现一般错误,目前无法处理应用程序info.plist验证(1095)

enter image description here

我在网上搜索了此内容,但仍未找到解决方案。

trans by 2020-01-14T16:26:15Z

1 2 3 4 5 6 下一页 共6页