我想知道在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或者是否有另一种首选方法?
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)另外,有没有办法设置业务规则if x < 0 raise error,总是在没有try/except/finally这样的情况下进行检查,如果在整个代码中的任何时候x小于0都会引发错误,就像你assert x < 0在函数的开头设置一样,在函数内的任何地方哪里x变得少于0则引发异常?
我看到很多问题询问'如何'用特定的语言进行单元测试,但毫无疑问,问'什么','为什么'和'什么时候'.
我需要创建一个伪辅助类,用于单元测试(注入测试类).有没有办法在这样的类中使用TestCase断言?
我想将断言用于Fake类执行的一些常见检查.就像是:
class FakeFoo(object):
def do_foo(self, a, b):
assertNotNull(a)
...
Run Code Online (Sandbox Code Playgroud) 有人可以解释何时使用,什么是最佳的断言适用场景?
我的观点是:
if not then raise-O,它将被忽略那么,源代码(而非单元测试)中的使用场景是assert什么?
从我的传统经验来看,assert应该只存在于单元测试中,实际上并不能理解为什么它开始越来越多地出现在Python项目代码中。
我正在学习 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并没有被破坏,而且我犯了某种新手错误。谢谢!
伙计们,我正在尝试一个简单的端口扫描程序,以使用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)
但是我敢肯定,两个端口都是开放的