相关疑难解决方法(0)

我应该在Python中针对坏/非法参数组合提出哪个例外?

我想知道在Python中指示无效参数组合的最佳实践.我遇到过一些你有这样功能的情况:

def import_to_orm(name, save=False, recurse=False):
    """
    :param name: Name of some external entity to import.
    :param save: Save the ORM object before returning.
    :param recurse: Attempt to import associated objects as well. Because you
        need the original object to have a key to relate to, save must be
        `True` for recurse to be `True`.
    :raise BadValueError: If `recurse and not save`.
    :return: The ORM object.
    """
    pass
Run Code Online (Sandbox Code Playgroud)

唯一令人烦恼的是,每个包装都有自己的,通常略有不同BadValueError.我知道在Java中存在java.lang.IllegalArgumentException- 是否很好理解每个人都将BadValueError在Python中创建自己的s或者是否有另一种首选方法?

python arguments exception

496
推荐指数
6
解决办法
20万
查看次数

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万
查看次数

什么是单元测试?

我看到很多问题询问'如何'用特定的语言进行单元测试,但毫无疑问,问'什么','为什么'和'什么时候'.

  • 它是什么?
  • 它对我有什么用?
  • 我为什么要用它?
  • 我什么时候应该使用它(当不是时)?
  • 有哪些常见的陷阱和错误观念

glossary unit-testing

208
推荐指数
7
解决办法
4万
查看次数

有没有办法在TestCase之外使用Python单元测试断言?

我需要创建一个伪辅助类,用于单元测试(注入测试类).有没有办法在这样的类中使用TestCase断言?

我想将断言用于Fake类执行的一些常见检查.就像是:

class FakeFoo(object):

  def do_foo(self, a, b):
    assertNotNull(a)
    ...
Run Code Online (Sandbox Code Playgroud)

python unit-testing

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

Python assert的使用场景是什么

有人可以解释何时使用,什么是最佳的断言适用场景?

我的观点是:

  • 既然等于 if not then raise
  • 在优化模式下-O,它将被忽略

那么,源代码(而非单元测试)中的使用场景assert什么?

从我的传统经验来看,assert应该只存在于单元测试中,实际上并不能理解为什么它开始越来越多地出现在Python项目代码中。

python assert

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

无法使用 Pytest 断言列表长度

我正在学习 Python,并且在学习时使用 Pytest 来检查我的代码。这是我运行的一些示例代码:

str = "I love pizza"
str_list = list(str)
print(str_list)
print(len(str_list))
Run Code Online (Sandbox Code Playgroud)

将预期结果打印到标准输出:

['I', ' ', 'l', 'o', 'v', 'e', ' ', 'p', 'i', 'z', 'z', 'a']
12
Run Code Online (Sandbox Code Playgroud)

但如果我运行这个测试:

def create_list_from_string():
    str = "I love pizza"
    str_list = list(str)
    assert 123 == len(str_list)
Run Code Online (Sandbox Code Playgroud)

我无法让断言失败。我在文件中还有其他测试,这些测试按预期通过,但如果我故意编辑它们以使它们失败,则会失败。所以我认为我已经正确设置了 Pytest。我知道 Python 对代码块使用缩进,并且我验证了所有缩进都是 4 个空格,并且没有尾随制表符或空格。我也知道这assert并没有被破坏,而且我犯了某种新手错误。谢谢!

python pytest

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

循环在socket.connect_ex()中不起作用

伙计们,我正在尝试一个简单的端口扫描程序,以使用socket.connect_ex((192.169.10.1, 80))
它来验证端口是打开还是关闭,但是它想传递多个IP和端口,因此我使用了list并使用for循环对其进行了迭代。我只获得列表中第一个IP的结果,第二个IP没有给出正确的结果,而是总是运行elif块,这可能是什么问题?有人可以指导我哪里出问题了。

我的密码:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

iplst = ['193.169.10.100', '193.169.10.101']
ports = [80, 80]

for i,j in zip(iplst,ports):

   result = sock.connect_ex((i,j))

   if result == 0:
      print("open" , i)
   elif result != 0:
      print("closed", i)
Run Code Online (Sandbox Code Playgroud)

输出:

open 193.169.10.100
closed 193.169.10.101
Run Code Online (Sandbox Code Playgroud)

但是我敢肯定,两个端口都是开放的

python sockets

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