标签: raise

Python断言的最佳实践

  1. assert作为标准代码的一部分使用而不是仅仅用于调试目的,是否存在性能或代码维护问题?

    assert x >= 0, 'x is less than zero'
    
    Run Code Online (Sandbox Code Playgroud)

    好或坏比

    if x < 0:
        raise Exception, 'x is less than zero'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 另外,有没有办法设置业务规则if x < 0 raise error,总是在没有try/except/finally这样的情况下进行检查,如果在整个代码中的任何时候x小于0都会引发错误,就像你assert x < 0在函数的开头设置一样,在函数内的任何地方哪里x变得少于0则引发异常?

python assert raise assertion

452
推荐指数
11
解决办法
22万
查看次数

如何在Python中使用"raise"关键字

我已经阅读了"加注"的官方定义,但我仍然不太明白它的作用.

简单来说,什么是"提高"?

示例用法会有所帮助.

python raise keyword

245
推荐指数
6
解决办法
31万
查看次数

如何在嵌套的try/except块中重新引发异常?

我知道如果我想重新引发一个异常,我raise在相应的except块中使用不带参数.但是给出了一个嵌套的表达式

try:
    something()
except SomeError as e:
    try:
        plan_B()
    except AlsoFailsError:
        raise e  # I'd like to raise the SomeError as if plan_B()
                 # didn't raise the AlsoFailsError
Run Code Online (Sandbox Code Playgroud)

如何在SomeError不破坏堆栈跟踪的情况下重新提升?raise在这种情况下,单独会重新提高最近AlsoFailsError.或者我怎么能重构我的代码以避免这个问题?

python nested exception raise

80
推荐指数
4
解决办法
5万
查看次数

如何使用pytest检查是否未引发Error

让我们假设我们有这样的结果:

import py, pytest

ERROR1 = ' --- Error : value < 5! ---'
ERROR2 = ' --- Error : value > 10! ---'

class MyError(Exception):
    def __init__(self, m):
        self.m = m

    def __str__(self):
        return self.m

def foo(i):
    if i < 5:
        raise MyError(ERROR1)
    elif i > 10:
        raise MyError(ERROR2)
    return i


# ---------------------- TESTS -------------------------
def test_foo1():
    with pytest.raises(MyError) as e:
        foo(3)
    assert ERROR1 in str(e)

def test_foo2():
    with pytest.raises(MyError) as e:
        foo(11)
    assert ERROR2 in str(e)

def test_foo3(): …
Run Code Online (Sandbox Code Playgroud)

python raise pytest

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

Rails ActiveSupport:如何声明引发错误?

我想在我的一个模型上测试一个抛出特定错误的函数.该函数看起来像这样:

def merge(release_to_delete)
  raise "Can't merge a release with itself!" if( self.id == release_to_delete.id )
  raise "Can only merge releases by the same artist" if( self.artist != release_to_delete.artist   )
  #actual merge code here
end
Run Code Online (Sandbox Code Playgroud)

现在我想做一个断言,当我用一个导致每个异常的参数调用这个函数时,实际上会抛出异常.我正在查看ActiveSupport文档,但我没有找到任何有希望的东西.有任何想法吗?

assert ruby-on-rails raise activesupport

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

TypeError:exception必须是旧式类或派生自BaseException,而不是str

以下是我的代码:

test = 'abc'
if True:
    raise test + 'def'
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它给了我 TypeError

TypeError: exceptions must be old-style classes or derived from BaseException, not str
Run Code Online (Sandbox Code Playgroud)

那应该test是什么类型的?

python raise typeerror

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

Raise Try和Assert之间的区别

我已经学习了Python一段时间和raise功能,assert并且(我意识到他们两个都崩溃了应用程序,不像尝试 - 除外)非常相似,我看不到你会使用raiseassert结束的情况try.

那么,Raise,Try和Assert有什么区别?

python assert raise

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

是否可以在Python中引发内置异常,但使用不同的消息?

用自定义文本引发内置异常是否可以?或者使用自定义文本引发内置警告

文件内容如下:

exception ValueError:当内置操作或函数接收参数时引发(...)

是否暗示只有内置操作才会引发ValueError异常?

实际上,我知道创建一个继承自ValueError或Exception的异常类是安全的.但是可以不这样做,并直接引发ValueError("自定义文本")?

由于ValueError是内置的,因此与自定义异常类型(类似"ValueErrorSpecificModule",这不是标准的)相比,引发ValueError(使用自定义文本)允许用户快速查看所涉及的问题类型.

python exception raise built-in

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

不要在异常堆栈中显示Python提升行

当我在Python库中引发自己的异常时,异常堆栈将raise-line本身显示为堆栈的最后一项.这显然不是错误,在概念上是正确的,但是当您在外部使用代码时,例如作为模块,将注意力集中在对调试无用的事情上.

有没有办法避免这种情况,并强制Python将前一个到最后一个堆栈项显示为最后一个堆栈项,就像标准的Python库一样.

python stack exception raise

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

关于条件表达式的语句

遵循"武士原则",我试图在我的功能上做这个,但似乎是错的......

return <value> if <bool> else raise <exception>
Run Code Online (Sandbox Code Playgroud)

有没有其他"美丽"的方式来做到这一点?谢谢

python conditional exception raise zen-of-python

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