标签: raise

如何在Python 2中模仿Python 3的引发?

Python 3很整洁

try:
    raise OneException('sorry')
except OneException as e:
    # after a failed attempt of mitigation:
    raise AnotherException('I give up') from e
Run Code Online (Sandbox Code Playgroud)

允许在不丢失上下文的情况下引发后续异常的语法.我在Python 2中可以提出的最好的比喻是

raise AnotherException((e,'I give up')), None, sys.exc_info()[2]
Run Code Online (Sandbox Code Playgroud)

(e,'')是一个丑陋的黑客,它将原始异常的名称包含在消息中.但是不是有更好的方法吗?

exception raise traceback python-2.7 python-3.x

21
推荐指数
2
解决办法
5822
查看次数

在C#中举起一个事件

我在微软实践测试中遇到了这个问题,我感到很困惑.这是一个问题:

假设已声明了Alarm事件,AlarmEventArgs类和AlarmEventHandler委托,以下哪个C#代码示例是引发事件的正确方法?

以下是他们提供的"正确"答案:

AlarmEventArgs e = new AlarmEventArgs(1, 2);
AlarmEventHandler handler = Alarm; 
if (handler != null) 
{ 
    handler(this, e);
}
Run Code Online (Sandbox Code Playgroud)

但是,还有另一个看似正确的答案.

AlarmEventArgs e = new AlarmEventArgs(1, 2);
if (Alarm!= null) 
{ 
    Alarm (this, e);
}
Run Code Online (Sandbox Code Playgroud)

我个人总是使用第二种方法.它工作得很好.有人可以告诉我为什么我应该使用第一种方法而不是第二种方法?

c# events raise

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

从C++/CLI引发事件的正确方法?

我想知道从C++/CLI引发事件的正确方法是什么.在C#中,我应首先制作处理程序的副本,检查它是否为空,然后调用它.C++/CLI有类似的做法吗?

events c++-cli raise

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

C#:你举起或抛出一个例外吗?

我知道这可能并不重要,但我想知道什么是正确的.

如果一段代码包含某些版本的throw new SomeKindOfException().我们是否说这段代码可能引发异常?或抛出异常?

关键字是throw,所以我倾向于那个,但提出异常也被大量使用...

他们有某种不同的含义吗?他们中的一个是否与另一个有所不同?或者它只是两个词意味着完全相同的东西?

c# terminology exception raise throw

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

提升WPF MouseLeftButtonDownEvent事件

我正在尝试通过使用以下代码将它冒泡到Visual树中来引发MouseLeftButtonDownEvent.

         MouseButtonEventArgs args = new MouseButtonEventArgs(Mouse.PrimaryDevice,0,     MouseButton.Left);            
        args.RoutedEvent = UIElement.MouseLeftButtonDownEvent;
        args.Source = this;
        RaiseEvent(args);
Run Code Online (Sandbox Code Playgroud)

由于某种原因,较高级别的组件未收到此冒泡事件.我是否忽略了某些事情或者是否无法举起这个鼠标事件

wpf events raise

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

Python重新加载/重新获取异常

我想知道在python中是否有可能在一个除了块之外引发异常并在稍后的块中捕获它.我相信其他一些语言默认会这样做.

这就是它的样子"

try:
   something
except SpecificError as ex:
   if str(ex) = "some error I am expecting"
      print "close softly"
   else:
      raise
except Exception as ex:
   print "did not close softly"
   raise
Run Code Online (Sandbox Code Playgroud)

我希望在else子句中使用raise来触发final语句.

实际上我不打印任何东西,只记录它,我想记录更多的情况,这是我不期望的错误消息.但是,这个额外的日志记录将包含在最终的日志中.

我相信一个解决方案是创建一个函数,如果它没有软关闭,在最后的except和else子句中调用.但这似乎没必要.

python exception raise

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

Python,在没有参数的情况下发起异常

我想知道关于在没有参数的情况下引发异常的最佳实践.在官方python文档中,您可以看到:

try:
    raise KeyboardInterrupt
Run Code Online (Sandbox Code Playgroud)

(http://docs.python.org/tutorial/errors.html第8.6章)

在一些不同的代码中,比如Django或Google代码,你可以看到:

  def AuthenticateAndRun(self, username, password, args):
    raise NotImplementedError()
Run Code Online (Sandbox Code Playgroud)

(http://code.google.com/p/neatx/source/browse/trunk/neatx/lib/auth.py)

在没有参数的情况下,异常是在被提升之前实例化的.没有参数实例化异常的目的是什么?什么时候应该使用第一种情况或第二种情况?

在此先感谢Fabien

python arguments exception raise

12
推荐指数
2
解决办法
3782
查看次数

CardView动画:点击提升和扩展?

我目前正在创建我的第一个Android应用程序,并想知道设置一个cardview升高然后扩展到一个更大的矩形,揭示一个新的片段是什么方法?

编辑:(无论原始卡位于何处,新片段都会填满屏幕的中间三分之一)

animation expand android raise

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

如何取消评估所需的Ruby文件?

file1 需要file2,我希望能够file2在某些条件下取消评估而不退出整个过程.

# file1.rb
  puts "In file 1"
  require 'file2'
  puts "Back in file 1"

# file2.rb
  puts "In file 2"
  # return if some_conditional
  puts "Still in file 2"
Run Code Online (Sandbox Code Playgroud)

运行时file1,我想看到的输出是:

In file 1
In file 2
Back in file 1
Run Code Online (Sandbox Code Playgroud)

目标是Still in file 2永不打印,同时Back in file 1打印.我能做些什么才能做到file2这一点?

我无法使用exit/ exit!/ abort这里,因为Back in file 1永远不会打印.我可以使用raise/ fail,但为了做到这一点,我将不得不改变file1rescue …

ruby return raise exit abort

10
推荐指数
2
解决办法
493
查看次数

Python不带参数的“引发”:什么是“当前作用域中活动的最后一个异常”?

Python的文档说:

如果不存在任何表达式,请raise重新引发当前作用域中活动的最后一个异常。

(Python 3:https//docs.python.org/3/reference/simple_stmts.html#raise; Python 2.7:https//docs.python.org/2.7/reference/simple_stmts.html#raise。)

但是,“上次激活”的概念似乎已经改变。见证以下代码示例:

#
from __future__ import print_function
import sys
print('Python version =', sys.version)

try:
    raise Exception('EXPECTED')
except:
    try:
        raise Exception('UNEXPECTED')
    except:
        pass
    raise # re-raises UNEXPECTED for Python 2, and re-raises EXPECTED for Python 3
Run Code Online (Sandbox Code Playgroud)

这会导致我在Python 2中出乎意料的事情:

Python version = 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AMD64)]
Traceback (most recent call last):
  File "./x", line 10, in <module>
    raise Exception('UNEXPECTED')
Exception: …
Run Code Online (Sandbox Code Playgroud)

python exception raise python-2.7 python-3.x

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