标签: try-except

如何替换空的 except 块?

浏览一些遗留代码,我遇到一些“空”的 except 块。它们都是出于类似的原因而实现的,即处理从 TEdit 中的文本到数值的转换。由于 TEdit 可能为空,因此在这种情况下不应出现错误消息:

procedure TmyForm.EditExit(Sender: TObject);
begin
  ...  
  try
    _value := StrToFloat(Edit.Text);
  except
  end; 
  ...
end;
Run Code Online (Sandbox Code Playgroud)

这很有效,但我想这并不是一个好的做法。有没有更好的方法来获得相同的行为?

delphi exception try-except

2
推荐指数
1
解决办法
677
查看次数

使用嵌套的"try/finally""try/except"语句

我在StackOverflow上看到过此代码:

with TDownloadURL.Create(nil) do
  try
    URL := 'myurltodownload.com';
    filename := 'locationtosaveto';
    try
      ExecuteTarget(nil);
    except
      result := false;
    end;
    if not FileExists(filename) then
      result := false;
  finally
    free;
  end;
Run Code Online (Sandbox Code Playgroud)

不能简化为:

 Result:= FALSE;               <--------- Compiler complains
 DeleteFile(Dest);
 dl:= TDownloadURL.Create(NIL);
 TRY
   dl.URL:= URL;
   dl.FileName:= Dest;
   dl.ExecuteTarget(NIL);           
   Result:= FileExists(Dest);
 FINALLY
   dl.Free;
 END;
Run Code Online (Sandbox Code Playgroud)

如果"ExecuteTarget"出现问题,最终的结果:= ...将永远不会执行,因为程序将直接跳转到"finally".对?因此,该函数将返回FALSE.难道我做错了什么?


PS:

  1. 我打算在一个线程中使用这个代码.
  2. 我只是将函数放在Delphi中,并且编译器抱怨第一行:"赋值从未使用过".

delphi try-finally try-except

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

如何确保在调试期间关闭sqlite数据库连接?

我正在研究一些连接到sqlite数据库的代码.在调试所述代码的过程中,我遇到的问题是我挂起了与数据库的连接,因为某些错误阻止了执行close命令.因为db和c是在函数中定义的,所以我无法从命令行中找到并关闭这些对象.他们就像孤儿连接或什么的,但在任何情况下,他们阻止我做任何事情都要与数据库中,直到我关闭并重新打开我的交互式控制台.这是它的样子:

def something()
    db=sqlite3.connect('mydatabase')
    c=db.cursor()

    somecode
    lots of different things happening in here
    this may have errors
    thus stopping execution

    db.commit()
    c.close()
    db.close()
Run Code Online (Sandbox Code Playgroud)

我尝试了一个try/except子句,最后关闭操作在"finally"块中,但这可以防止异常在我调试时被提升回交互式输出,并且事情"无声地"失败(也许我不是做那个部分吧?)有一个更好的方法吗?

python sqlite try-catch try-except

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

如何使用try和python捕获空用户输入?

我试图弄清楚如何使用try和除外捕获空用户输入.如果你有这个例子:

try:
    #user input here. integer input 
except ValueError:
    #print statement saying empty string.
Run Code Online (Sandbox Code Playgroud)

虽然我还需要捕获另一个值错误,以确保它们输入一个整数,而不是字符或字符串,我怎么能使用if和elif设置,以确定它是一个空字符串或str而不是int

python try-except

1
推荐指数
1
解决办法
2万
查看次数

进一步澄清:如何正确编写Try..Finally..Except语句?

RE:如何正确编写Try..Finally..Except语句?

我仍然对OP的原始问题感到困惑.具体来说,该过程的最后一行(在try..finally..end之外)读取"Screen.Cursor:= crDefault".

我的理解是,一个try..except内提出的任何异常| finally..end块WILL的的"尝试","结束"后执行代码.

procedure TForm1.Button1Click(Sender: TObject);
var
  Obj: TSomeObject;
begin
  Screen.Cursor := crHourGlass;

  Obj := TSomeObject.Create;
  try
    // do something
  finally
    Obj.Free;
  end;
  Screen.Cursor := crDefault;
end;
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我没有看到为什么"Screen.Cursor:= crDefault"不会被执行的任何原因.如果我错了,请纠正我.

作为另一个例子,我编译了这一小段代码来帮助说明.运行代码时,将显示三(3)个ShowMessage()对话框.第一个"Exception Raised"和第二个"finally"和第三个"结束".

procedure TForm1.Button1Click(Sender: TObject);
begin
   try
      try
         showMessage(format('%s', [12]));
      except
         showMessage('Exception raised');
      end;
   finally
      showMessage('finally');
   end;
   showMessage('at end');
end;
Run Code Online (Sandbox Code Playgroud)

所以,我很困惑为什么他的"Screen.Cursor:= crDefault"没有被运行,原因是它的原始形式和代码.有人可以详细说明吗?

delphi try-finally try-except

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

Python中的异常处理(尝试...例外)

我正在尝试try...except在下面的代码中实现异常处理。当输入类似“ s4”的内容时,我希望出现“非数字值...”的输出。

关于我哪里出问题了吗?

import string

import math

def getSqrt(n):
    return math.sqrt(float(n))

s = input("Enter a numerical value: ")

try:
    for i in s:
        if (i.isdigit() or i == "."):
            sType = "nonstr"

    if (sType =="nonstr"):
        print(getSqrt(s))

    else:
        s = "Non numberical value..."


except ValueError as ex:
    print(ex)


else:
    print(s)
Run Code Online (Sandbox Code Playgroud)

python exception-handling exception try-except

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

用于控制流的Python嵌套Try/Except/Else

我想以最优雅的Python方式实现的目标:尝试在某个过滤器上查找数据库中的对象.只有在没有结果的情况下,才尝试使用其他过滤器查找对象.如果没有返回结果,则该对象不存在,因此插入一个新实例.

我在想什么:

try:
    obj = session.query(model).filter_by(field_a).one()
except NoObjFound:
    try:
        obj = session.query(model).filter_by(field_b).one()
    except NoObjFound:
        insert_into_db(brand_new_obj)
else:
    update_the_obj(obj)
Run Code Online (Sandbox Code Playgroud)

我不确定这个块是否正确或是处理我想要完成的事情的最佳方法.

python nested idempotent try-except

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

如何正确使用try / except / with内部函数和main

我是一个相对的python新手,我对如何正确处理异常感到困惑。对于这个愚蠢的问题表示歉意。

在main()中,我遍历日期列表,并为每个日期调用一个函数,该函数从公共Web服务器下载csv文件。由于明显的原因,我想适当地捕获异常,但尤其是因为我不知道何时可以下载感兴趣的文件。我的程序将作为cron作业的一部分执行,并且将尝试每3小时下载一次这些文件(如果有)。

我想要的是下载日期列表中的第一个文件,如果结果为404,则该程序不应继续处理下一个文件,因为假设是如果列表中最旧的日期不可用,则没有一个之后的其他版本也将可用。

我有以下python伪代码。我在尝试下载文件的函数中有try / except块,但是如果函数中发生异常,我该如何在main()中正确处理它,以便我可以决定是否继续进行下一个日期。之所以创建一个执行下载的功能的原因是,我想稍后在同一main()块中针对其他文件类型重用该代码。

def main():
...
...
# datelist is a list of date objects
    for date in datelist:
        download_file(date)

def download_file(date):
    date_string = str(date.year) + str(date.strftime('%m')) + str(date.strftime('%d'))
    request = HTTP_WEB_PREFIX+ date_string + FILE_SUFFIX
    try: 
        response = urllib2.urlopen(request)
    except urllib2.HTTPError, e:
        print "HTTPError = " + str(e)
    except urllib2.URLError, e:
        print "URLError = " + str(e)
    except httplib.HTTPException, e:
        print "HTTPException = " + str(e)  
    except IOError:
        print "IOError = " + str(e)
    except Exception:
        import …
Run Code Online (Sandbox Code Playgroud)

python with-statement try-except

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

除了Python之外,写try的最佳方法是什么?

假设我有一个代码片段如下

r = requests.post(url, data=values, files=files)
Run Code Online (Sandbox Code Playgroud)

由于这是在发出网络请求,因此可以从此行抛出一堆异常.为了完整的论点,我也可以有文件读取,发送电子邮件等.为了遇到这样的错误我做

try:
  r = requests.post(url, data=values, files=files)
  if r.status_code != 200:
    raise Exception("Could not post to "+ url)
except Exception as e:
  logger.error("Error posting to " + url)
Run Code Online (Sandbox Code Playgroud)

我用这种方法看到了两个问题.

  1. 我刚刚处理了一个泛型异常,不知道这行会引发什么样的异常,在python中找到它的最佳方法是什么.
  2. 这使代码看起来很丑陋,这是非pythonic但很好,只要它强大并处理所有情况.

我想知道在python中处理异常的最佳方法是什么.

python try-except

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

如何以pythonic方式停止try/except的for循环代码执行?

我有一些Python代码如下:

for emailCredentials in emailCredentialsList:
   try:
       if not emailCredentials.valid:
           emailCredentials.refresh()
   except EmailCredentialRefreshError as e:
       emailCredentials.active = False
       emailCredentials.save()
       # HERE I WANT TO STOP THIS ITERATION OF THE FOR LOOP 
       # SO THAT THE CODE BELOW THIS DOESN'T RUN ANYMORE. BUT HOW?

   # a lot more code here that scrapes the email box for interesting information
Run Code Online (Sandbox Code Playgroud)

正如我已经在代码中注释的那样,如果EmailCredentialRefreshError抛出,我希望for循环的这个迭代停止并移动到下一个项目emailCredentialsList.我不能使用a,break因为这将停止整个循环,它不会覆盖循环中的其他项目.我当然可以将所有代码包装在try/except中,但我希望将它们保持在一起以便代码保持可读性.

解决这个问题的最恐怖的方法是什么?

python loops structure break try-except

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