这个问题更多的是好奇心而不是实用性.如果我正在编写一个应该永远运行的函数,例如一个守护进程,如果我从函数末尾再次调用该函数,Python将如何处理它?
def daemonLoop():
# Declare locals
# Do stuff
daemonLoop()
Run Code Online (Sandbox Code Playgroud)
我很确定在C中执行此操作会导致堆栈溢出,但考虑到从C到Python 的抽象级别,我猜测的东西是以不同的方式处理的.
我会为此而下地狱吗?
当我在PHP中开发我的REST API时,我正在使用application/json输出,所以当我在浏览器中测试时遇到错误时,它们看起来像这样:
<b>Fatal error</b>: Uncaught exception 'Exception' with message 'PDO caught an error:
array(3) {
[0]=>
string(5) "42000"
[1]=>
int(1065)
[2]=>
string(15) "Query was empty"
}
Run Code Online (Sandbox Code Playgroud)
当我得到大量的堆栈跟踪和东西时,它会变得更糟.那么有没有一个标志我可以设置告诉PHP我希望我的错误未转义和原始文本?
我之前只使用过一次PyInstaller,而且它在wxPython中非常直接.我现在正在尝试建立一个不同的项目.从命令行运行时,该项目运行良好.然而,在它构建之后,它永远不会启动主窗口(wxPython).
我在构建规范中将调试和控制台标志设置为True.我还添加[('v', '', 'OPTION')]了PyInstaller手册指定的verbose选项().这是规格:
# -*- mode: python -*-
# basedir = os.path.realpath(os.path.dirname(__file__))
basedir = os.getcwd()
# Build the icons toc.
icons_toc = []
for dir in os.walk(os.path.join(basedir, 'icons')):
for icon in dir[2]:
icons_toc.append(
(
os.path.join('icons', icon),
os.path.join(dir[0], icon),
'DATA',
)
)
a = Analysis(
['application.py'],
pathex=['.', './lib', '../broadpy/lib', '../broadpy/vendor'],
hiddenimports=[],
hookspath=None
)
a.datas += icons_toc
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts + [('v', '', 'OPTION')],
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join(
'dist', 'Address cleaner.exe'
),
debug=True,
strip=None, … 我正在尝试做一些听起来非常容易的事情,但由于某些原因它不起作用.命令:
:m 10
Run Code Online (Sandbox Code Playgroud)
将当前行移动到第10行的正下方,然后
:echo line(".") - 2
Run Code Online (Sandbox Code Playgroud)
打印出从光标向上两行的行号.阅读完文档后,我写了这个命令:
:m line(".") - 2
Run Code Online (Sandbox Code Playgroud)
它导致了这个错误:
M14:地址无效
所以我认为除非我使用=符号,否则不会评估函数,所以我试过:
:m =line(".") - 2
Run Code Online (Sandbox Code Playgroud)
这给了我同样的错误.为了确保空间不是原因,我试过:
:m =line(".")
Run Code Online (Sandbox Code Playgroud)
哪个仍然给我同样的错误!我在这做错了什么?
我确保:m接受整数并line()返回整数.
:echo type(5)
0
:echo type(line("."))
0
Run Code Online (Sandbox Code Playgroud) 有时当我编写单元测试时,我需要实例化一个没有initialize调用方法的类.例如,当构造函数实例化其他类时,无论如何我将替换为存根.例如:
class SomeClassThatIWillTest
def initialize
@client = GoogleAnalyticsClient.new
@cache = SuperAdvancedCacheSystem.new
end
# ...
end
Run Code Online (Sandbox Code Playgroud)
在测试中,我可能会替换两个@client和@cache存根,所以我宁愿从未调用构造函数.是否有任何黑魔法可以帮助我解决这个问题?
这是在Sublime Text 2的Ruby包中的一个片段文件中找到的Perl样式的正则表达式:
/(?:\A|_)([A-Za-z0-9]+)(?:\.rb)?/(?2::\u$1)/g
Run Code Online (Sandbox Code Playgroud)
我知道它将像"some_class.rb"这样的文件名转换为"SomeClass",但我无法弄清楚这部分是做什么的:(?2::.Sublime Text 2使用boost作为其正则表达式,所以我检查了Boost-Extended Format String Syntax的文档,我发现boost支持格式字符串(f.inst.(?2(foo):(bar)))中的条件,但你永远不需要两个冒号.另外,?2将指向第二个子表达式,但上面的表达式只匹配一个子表达式.出于这些原因,我不认为这是一个条件表达式.
感谢任何有启发性的答案.
我正在尝试使用geoutmgem install geoutm.Github存储库没有问题页面,所以我试图自己解决问题然后提交拉取请求.这是问题所在:
$ gem install geoutm
Fetching: geoutm-1.0.1.gem (100%)
Successfully installed geoutm-1.0.1
ERROR: While executing gem ... (TypeError)
no implicit conversion of Array into String
它说"成功安装",但试图要求宝石失败.详细安装不是更有用:
$ gem install geoutm --verbose HEAD https://rubygems.org/latest_specs.4.8.gz 302 Moved Temporarily HEAD https://s3.amazonaws.com/production.s3.rubygems.org/latest_specs.4.8.gz 200 OK GET https://rubygems.org/latest_specs.4.8.gz 302 Moved Temporarily GET https://s3.amazonaws.com/production.s3.rubygems.org/latest_specs.4.8.gz 200 OK Installing gem geoutm-1.0.1 /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/spec/latlon_spec.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/spec/geoutm_spec.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/spec/spec_helper.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/spec/utm_spec.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/spec/testdata.yaml /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/spec/spec.opts /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/spec/ellipsoid_spec.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/lib/geoutm/utm_zones.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/lib/geoutm/geo_utm_exception.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/lib/geoutm/utm.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/lib/geoutm/ellipsoid.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/lib/geoutm/latlon.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/lib/geoutm.rb /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/LICENCE /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/README.rdoc /home/tomas/.rvm/gems/ruby-2.0.0-p247/gems/geoutm-1.0.1/History.txt Successfully installed geoutm-1.0.1 ERROR: While executing gem ... …
我编写了一个删除文件中多余空格的函数:
let g:trim_whitespace = 1
function! TrimWhitespace()
if g:trim_whitespace
normal :%s/\s\+$//e
endif
endfunction
Run Code Online (Sandbox Code Playgroud)
问题是光标位置设置为[1, 1]替换命令之后.我根本不希望光标移动,所以我尝试保存光标位置并在替换命令后重置它:
let a:cursor_pos = getpos(".")
normal :%s/\s\+$//e
exec cursor(a:cursor_pos[1], a:cursor_pos[2])
Run Code Online (Sandbox Code Playgroud)
但仍然会发生完全相同的事情,就好像呼叫cursor没有效果一样.有任何想法吗?
这是我的 API 测试目录布局:
\napi_tests\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 conftest.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 query\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 me_test.py\nRun Code Online (Sandbox Code Playgroud)\nconftest.py的内容:
\napi_tests\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 conftest.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 query\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 me_test.py\nRun Code Online (Sandbox Code Playgroud)\nme_test.py 的内容:
\nprint("CONFTEST LOADED")\nRun Code Online (Sandbox Code Playgroud)\n如果我只是运行pytest,一切正常:
================================================= test session starts =================================================\nplatform linux -- Python 3.8.5, pytest-6.1.0, py-1.9.0, pluggy-0.13.1\nrootdir: /home/hubro/myproject, configfile: pytest.ini\ncollecting ... CONFTEST LOADED\ncollected 3 items \n\napi_tests/query/me_test.py . [ 33%]\nlib/myproject/utils_test.py . [ 66%]\nlib/myproject/schema/types/scalars_test.py . \nRun Code Online (Sandbox Code Playgroud)\n注意打印“CONFTEST LOADED”。伟大的!然而,这个测试运行也获取了我不想要的所有单元测试。我想将我的测试运行分为单元测试和 API 测试,我不想一次性运行它们。
\n但是,如果我只是运行pytest api_tests/:
================================================= test session starts =================================================\nplatform linux -- Python 3.8.5, pytest-6.1.0, py-1.9.0, pluggy-0.13.1\nrootdir: …Run Code Online (Sandbox Code Playgroud) 我已经完成了许多"make for Python"项目,但我找不到任何简单的蛋糕文件.我正在寻找的是一个Python等价物,它将让我:
我想象的是这样的:
from pymake import task, main
@task('reset_tables', 'Drop and recreate all MySQL tables')
def reset_tables():
# ...
@task('build_stylus', 'Build the stylus files to public/css/*')
def build_stylus():
from myproject import stylus_builder
# ...
@task('build_cscript', 'Build the coffee-script files to public/js/*')
def build_cscript():
# ...
@task('build', 'Build everything buildable')
def build():
build_cscript()
build_stylus()
# etc...
# Function that parses command line args etc...
main()
Run Code Online (Sandbox Code Playgroud)
我搜索过并搜索过但却没有找到它.如果它不存在,我会自己做,并可能用它回答这个问题.
谢谢你的帮助!
python ×4
ruby ×2
vim ×2
boost ×1
c ×1
gem ×1
makefile ×1
php ×1
pyinstaller ×1
pytest ×1
recursion ×1
regex ×1
rubygems ×1
sublimetext2 ×1
unit-testing ×1