相关疑难解决方法(0)

在一行中捕获多个异常(块除外)

我知道我能做到:

try:
    # do something that may fail
except:
    # do this if ANYTHING goes wrong
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

try:
    # do something that may fail
except IDontLikeYouException:
    # say please
except YouAreTooShortException:
    # stand on a ladder
Run Code Online (Sandbox Code Playgroud)

但如果我想在两个不同的例外中做同样的事情,我现在能想到的最好的就是这样做:

try:
    # do something that may fail
except IDontLikeYouException:
    # say please
except YouAreBeingMeanException:
    # say please
Run Code Online (Sandbox Code Playgroud)

有什么办法我可以做这样的事情(因为两个例外的行动都是say please):

try:
    # do something that may fail
except IDontLikeYouException, YouAreBeingMeanException:
    # say please
Run Code Online (Sandbox Code Playgroud)

现在这真的不起作用,因为它符合以下语法:

try:
    # do something that may fail
except …
Run Code Online (Sandbox Code Playgroud)

python exception-handling exception

2521
推荐指数
6
解决办法
72万
查看次数

Django 使用 try: 和 except:

我想知道是否可以编写一个处理异常的方法,例如 2 个或更多,除了要执行不同的任务。

我正在使用 Django==1.6.1Python 2.7

try:
    foo_instance = foo.objects.get(field_name='unknown')

except foo.DoesNotExist:
    new_rec = foo.objects.create(field_name='unknown')
    new_rec.save()

    foo_instance = foo.objects.get(field_name='unknown')

except foo.MultipleObjectsReturned:
    foo_list = foo.objects.filter(field_name='unknown')
    for record in foo_list[1:]:
       print 'Deleting foo id: ', record.id
       record.delete()

    foo_instance = foo.objects.get(field_name='unknown')
Run Code Online (Sandbox Code Playgroud)

python django exception-handling python-2.7

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

Python尝试/除了多个除块之外

try:
    raise KeyError()
except KeyError:
    print "Caught KeyError"
    raise Exception()
except Exception:
    print "Caught Exception"
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,Exception()在最后一个except Exception条款中没有提到第5行.为了捕获except KeyError块内的异常,我必须添加另一个try...except这样的并复制最终的except Exception逻辑:

try:
    raise KeyError()
except KeyError:
    print "Caught KeyError"
    try:
        raise Exception()
    except Exception:
        print "Caught Exception"
except Exception:
    print "Caught Exception"
Run Code Online (Sandbox Code Playgroud)

在Python中,是否有可能将执行流程传递给最终except Exception块,就像我想要做的那样?如果没有,是否有减少逻辑重复的策略?

python exception

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

如何避免尝试和排除语句的长链?

我正在尝试使用Mechanize python软件包在网站上查找搜索框,以在网页上查找表单。几乎每个网站都以自己的方式定义这些形式,因此我需要搜索大量不同的签名。由于Mechanize Browser.select_form函数在找不到指定的表单时会引发异常,因此寻找许多不同的表单会变成一长串try和except语句。

我尝试过(或推入)的第一件事是以下结构。它可以工作,但是1:看起来不太好; 2:扩展不好(如果我需要更多的语句,这会造成混乱); 3:总的来说,这似乎是不好的代码。

from mechanize import Browser
br = Browser()
br.open(url)
try:
    br.select_form(id=lambda x: 'search' in x)
except Exception:
    try:
        br.select_form(class_=lambda x: 'search' in x)
    except Exception:
        try:
            br.select_form(action=lambda x: 'search' in x)
        except Exception:
            try:
                br.select_form(role=lambda x: 'search' in x)
            except Exception:
                print('NOTHING FOUND')
                pass
Run Code Online (Sandbox Code Playgroud)

/sf/answers/426704771/中所示,可能稍微好一点的解决方案是将except子句定向到函数。这样可以解决横向扩展,但仍然包含许多重复的代码。

对我来说,理想的解决方案是拥有一个可以迭代的语句列表,直到找到一种类型的表单为止。一个非常粗糙的例子是:

forms = ['id=lambda x: 'search' in x', 'class_=lambda x: 'search' in x', .....]
for form in forms:
    try:
        br.select_form(form)
        break
    except Exception:
        pass
Run Code Online (Sandbox Code Playgroud)

有可能与此类似吗?

python exception

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

Python 3 中如何处理多个异常?

我正在使用 Tkinter 创建一个计算器应用程序。我需要多种类型的异常语句,通过针对用户引起的不同异常的不同类型的输出来告知用户。

例如:

如果用户将数字除以零,则会出现除零错误。在这种情况下,我必须创建一个仅处理除零错误的异常语句。

同时,如果用户输入“100++2”而不是“100+2”等无效操作,则会出现无效语法错误。在这种情况下,我必须在同一个尝试中指定不同的异常语句,以不同的方式处理这种情况。

那么,如何做到这一点呢?

python exception tkinter

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