天道酬勤,学无止境

python-3.x

How to mock a property

问题 我在问如何使用 Python 3 在单元测试中模拟类属性。我尝试了以下方法,这对我遵循文档很有意义,但它不起作用: foo.py: class Foo(): @property def bar(self): return 'foobar' def test_foo_bar(mocker): foo = Foo() mocker.patch.object(foo, 'bar', new_callable=mocker.PropertyMock) print(foo.bar) 我已经安装了pytest和pytest_mock并像这样运行测试: pytest foo.py 我收到以下错误: > setattr(self.target, self.attribute, new_attr) E AttributeError: can't set attribute /usr/lib/python3.5/unittest/mock.py:1312: AttributeError 我的期望是测试运行没有错误。 回答1 属性机制依赖于在对象的类上定义的属性属性。 您不能在类的单个实例上创建“类似属性”的方法或属性(为了更好地理解,请阅读 Python 的描述符协议) 因此,您必须将补丁应用到您的类 - 您可以使用with语句,以便在测试后正确恢复该类: def test_foo_bar

2022-07-11 09:58:03    分类:技术分享    python   python-3.x   pytest   python-unittest   python-mock

Using Windows to run a virtual environment Created on Ubuntu

问题 所以我一直在开发一个带有后端数据库的网站。 以下是我当前的设置,效果很好: 目前使用 Ubuntu 16.04 我创建了一个 virtualenv 并在虚拟环境中下载了 Django 和 postgreSQL。 我还在虚拟环境中下载并使用了 Python 3.5.2。 我的整个文件夹结构都在 GitHub 上,这样我就可以随时随地编辑代码(同样,在 Ubuntu 上一切正常)。 当我想开始使用 Powershell 在 Windows 10 上进行一些编辑时,问题就出现了。 我不确定如何运行“activate.sh”、“activate.csh”或“activate.fish”文件以运行虚拟环境并使用“python manage.py runserver”初始化我的服务器,这样我就可以开始了编辑我的网站。 有没有人遇到过这个问题并发现了如何解决这个问题? 关于如何开始在 Windows 上工作的任何帮助都会很棒。 如果您需要更多详细信息,我很乐意提供。 谢谢! 回答1 假设您在 ubuntu 上创建了一个没有可重定位选项的 virtualenv。 您必须首先在 Windows 上创建一个新的虚拟环境,因为它们在操作系统变化方面存在差异。 因此,导航到您要在 Windows 上创建新虚拟环境的目录并运行以下命令:- virtualenv 。 (注意 . 指定当前目录选项

2022-07-11 09:53:16    分类:技术分享    django   windows   python-3.x   powershell   virtualenv

Python zip() two lists

问题 filename = input("Which file do you want to open?: \n") file = open("C:/"+ filename,'r') movielist = [] moviename = [] moviedate = [] for line in file: line.strip() name = re.search('name:(.*)',line) date = re.search('date:(.*)',line) if name: titel = name.group(1) moviename.append(titel) if date: datum = date.group(1) moviedate.append(datum) print("Name of the list: ", moviename.pop(0)) movielist= zip(moviename,moviedate) print(movielist) print("Number of movies: " , len(moviename)) 回答1 movielist= list(zip(moviename,moviedate))

2022-07-11 09:49:44    分类:技术分享    python   python-3.x   zip

"non-integer arg 1 for randrange()" in python libary

问题 我使用随机发生器来生成从 5 到 10 的随机数。不能这么难吗? 我以前在代码上使用过它(+2000 行代码,这里太多了)并且没有发生编码错误。 我的代码只是我游戏的复活节彩蛋,但它破坏了我的所有代码: ... def slowp(t): for l in t: sys.stdout.write(l) sys.stdout.flush() x=random.randint(0.1,0.9) time.sleep(x) print("") if act=="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>": slowp("Hey, that is hello world made in brainfuck!") ... act是一个字符串,其值由用户简单地使用act=str(input("type here."))提供。 直接在这部分之前完成。 错误信息: Traceback (most recent call last): File "startgame.py", line 2084, in <module> slowp("Hey, that is hello world made in

2022-07-11 09:40:13    分类:技术分享    python   python-3.x   random

Import Error: can't import name gcd from fractions

I'm trying to import a function called gcd from a module called fractions with from fractions import gcd. For some reason, PyCharm throws an ImportError: from fractions import gcd ImportError: cannot import name 'gcd' from 'fractions' I had this working before, what am I doing wrong?

2022-06-04 04:10:03    分类:问答    python-3.x   importerror

How to convert list to dict

问题 { '0' : 'a', '1' : 'b', '2' : 'c', '3' : 'd' } 回答1 print(dict(enumerate(["a","b","c", "d"]))) 回答2 使用字典理解。 >>> a = ["a","b","c", "d"] >>> {i: j for i,j in enumerate(a)} {0: 'a', 1: 'b', 2: 'c', 3: 'd'} 枚举 回答3 我认为你应该创建一个 dict 然后制作它: {'0' : list[0], '1' : list[1], '2' : list[2],'3' : list[3]} 因为我认为您不能以任何其他方式将列表转换为字典

2022-05-17 05:33:08    分类:技术分享    python-3.x   dictionary

Retrieve all text of an element including its child in python

问题 我编写了一个代码来查找 xml 中特定标签中的文本。 它适用于没有子标签的标签。 For e.g. 1 <a>ajsaka</a>. it works fine for this. e.g. 2 But if there is an instance of <b>ahsjd<c>jjiij</c>aa</b>. 它不起作用。 我想要标签中的所有内容,包括其子元素文本。 我希望它打印 ahsjdjjiijaa,但它只打印 ahsjd。 到目前为止,这是我的代码。 这是输入文件。 <level> <ex> <nt>[edit <topic-ref link-text="short-title" topic-id="13629">address</topic-ref>],</nt> <nt>[edit routing-instances <var>routing-instance-name</var > <topic-ref link-text="short-title" topic-id="13629">address- assignment</topic-ref >]</nt> </ex> <exam> </exam> </level> from lxml import etree doc=etree.parse('C:/xx/bb.xml') root=doc.getroot

2022-05-17 05:27:38    分类:技术分享    xml   python-3.x   elementtree   xml.etree

How to obtain username from UserID in Telegram?

问题 回答1 这就是为什么您总是使用用户 ID 处理消息的原因 但要回答您的问题,您可以直接使用user对象获取用户的用户名,例如update.message.from_user.username或update.effective_user.username或使用bot.getchat(chat_id)获取某个用户对象聊天(可能是用户的私人聊天

2022-05-17 05:23:14    分类:技术分享    python-3.x   telegram   telegram-bot   python-telegram-bot

Default values for iterable unpacking

问题 我经常对 Python 的可迭代解包缺乏灵活性感到沮丧。 举个例子: a, b = range(2) 工作正常。 正如预期的那样, a包含0并且b包含1 。 现在让我们试试这个: a, b = range(1) 现在,我们得到一个ValueError : ValueError: not enough values to unpack (expected 2, got 1) 不理想,当所需的结果是a中的0和b中的None时。 有很多技巧可以解决这个问题。 我见过的最优雅的是: a, *b = function_with_variable_number_of_return_values() b = b[0] if b else None 不漂亮,可能会让 Python 新手感到困惑。 那么最Pythonic的方法是什么? 将返回值存储在变量中并使用 if 块? *varname破解? 还有什么? 回答1 正如评论中提到的,最好的方法是让你的函数返回一个恒定数量的值,如果你的用例实际上更复杂(如参数解析),请使用它的库。 但是,您的问题明确要求以 Python 方式处理返回可变数量参数的函数,我相信它可以用装饰器干净地完成。 它们不是很常见,大多数人倾向于使用它们而不是创建它们,所以这里有一个关于创建装饰器的实用教程,以了解更多关于它们的信息。 下面是一个装饰功能,可以满足您的需求

2022-05-17 04:59:13    分类:技术分享    python   python-3.x   iterable-unpacking

How to install pymssql module in Python 3.6?

问题 回答1 这似乎从 导出 PYMSSQL_BUILD_WITH_BUNDLED_FREETDS=1 点安装 pymssql 回答2 记得先安装FreeTDS 。 Ubuntu/Debian: sudo apt-get install freetds-dev 带有 Homebrew 的 Mac OS X: brew install freetds 最后: pip install pymssql 回答3 由于站点 pymssql_documentation 页面声明该模块已弃用, 我们可以使用pip install "pymssql<3.0" 。 它适用于 python 3.0 及更高版本。 我认为他们也应该在主副本区域进行更改。 截至 2019 年 12 月 17 日,它仍然显示pip install pymssql ,它已于 2019 年 11 月 16 日更新。 回答4 只需使用来自 gitub 的最新版本的 pymssql: pip3 install git+https://github.com/pymssql/pymssql 也适用于 python2 pip install git+https://github.com/pymssql/pymssql UPDATE: 对于macOS Big Sur Apple M1芯片处理器: 您需要为新的 ARM 芯片(M1 芯片)安装

2022-05-17 03:49:29    分类:技术分享    python-3.x   python-3.6   pymssql