相关疑难解决方法(0)

Python尝试...除了逗号vs'as'之外

除语句中','和'as'之间有什么区别,例如:

try:
    pass
except Exception, exception:
    pass
Run Code Online (Sandbox Code Playgroud)

和:

try:
    pass
except Exception as exception:
    pass
Run Code Online (Sandbox Code Playgroud)

第二种语法在2.6中合法吗?它适用于Windows上的CPython 2.6,但cygwin中的2.5解释器抱怨它无效.

如果它们在2.6中都有效,我应该使用哪个?

python python-2.6

240
推荐指数
4
解决办法
8万
查看次数

在Python中"取消捕获"异常

我应该如何"重新抛出"异常,也就是说,假设:

  • 我在我的代码中尝试了一些东西,不幸的是它失败了.
  • 我尝试了一些"聪明"的解决方法,这次碰巧也失败了

如果我从(失败的)解决方法中抛出异常,那对用户来说会非常混乱,所以我认为最好重新抛出原始异常(?),并附带描述性回溯(关于实际的)问题)...

注意:这方面的激励示例是在调用时np.log(np.array(['1'], dtype=object)),它尝试一个诙谐的解决方法并给出一个AttributeError(它"真的"一个TypeError).

我能想到的一种方法就是重新调用有问题的函数,但这似乎是伪造的(理论上,原始函数可能会在第二次调用时发挥一些不同的行为):
好的,这是一个可怕的例子,但是...

def f():
    raise Exception("sparrow")

def g():
    raise Exception("coconut")

def a():
    f()
Run Code Online (Sandbox Code Playgroud)

假设我这样做了:

try:
    a()
except:
    # attempt witty workaround
    g()
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-4-c76b7509b315> in <module>()
      3 except:
      4     # attempt witty workaround
----> 5     g()
      6

<ipython-input-2-e641f2f9a7dc> in g()
      4
      5 def g():
----> 6     raise Exception("coconut")
      7
      8

Exception: coconut
Run Code Online (Sandbox Code Playgroud)

嗯,问题根本不在于椰子,而是麻雀: …

python exception-handling exception

19
推荐指数
3
解决办法
3497
查看次数