小编Hub*_*bro的帖子

在Python中对无限循环使用无限递归是一种罪恶吗?

这个问题更多的是好奇心而不是实用性.如果我正在编写一个应该永远运行的函数,例如一个守护进程,如果我从函数末尾再次调用该函数,Python将如何处理它?

def daemonLoop():

    # Declare locals

    # Do stuff

    daemonLoop()
Run Code Online (Sandbox Code Playgroud)

我很确定在C中执行此操作会导致堆栈溢出,但考虑到从C到Python 的抽象级别,我猜测的东西是以不同的方式处理的.

我会为此而下地狱吗?

c python recursion function-calls infinite-loop

9
推荐指数
2
解决办法
528
查看次数

如何告诉PHP将异常转储为原始文本而不是HTML?

当我在PHP中开发我的REST API时,我正在使用application/json输出,所以当我在浏览器中测试时遇到错误时,它们看起来像这样:

<b>Fatal error</b>: Uncaught exception 'Exception' with message 'PDO caught an error:
array(3) {
  [0]=&gt;
  string(5) &quot;42000&quot;
  [1]=&gt;
  int(1065)
  [2]=&gt;
  string(15) &quot;Query was empty&quot;
}
Run Code Online (Sandbox Code Playgroud)

当我得到大量的堆栈跟踪和东西时,它会变得更糟.那么有没有一个标志我可以设置告诉PHP我希望我的错误未转义和原始文本?

php error-handling

9
推荐指数
2
解决办法
917
查看次数

如何调试无功能的PyInstaller构建?

我之前只使用过一次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, …

python pyinstaller

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

如何在Vim命令中使用函数的返回值?

我正在尝试做一些听起来非常容易的事情,但由于某些原因它不起作用.命令:

: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)

vim

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

是否可以在不调用initialize的情况下实例化Ruby类?

有时当我编写单元测试时,我需要实例化一个没有initialize调用方法的类.例如,当构造函数实例化其他类时,无论如何我将替换为存根.例如:

class SomeClassThatIWillTest
  def initialize
    @client = GoogleAnalyticsClient.new
    @cache = SuperAdvancedCacheSystem.new
  end

  # ...
end
Run Code Online (Sandbox Code Playgroud)

在测试中,我可能会替换两个@client@cache存根,所以我宁愿从未调用构造函数.是否有任何黑魔法可以帮助我解决这个问题?

ruby unit-testing

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

什么"(?x ::"表示在Boost正则表达式替换中,"x"是一个数字?

这是在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将指向第二个子表达式,但上面的表达式只匹配一个子表达式.出于这些原因,我不认为这是一个条件表达式.

感谢任何有启发性的答案.

regex boost sublimetext2

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

如何调试gem安装失败的原因?

我正在尝试使用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 ... …

ruby gem rubygems

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

如何保存当前光标位置并稍后在Vimscript中加载?

我编写了一个删除文件中多余空格的函数:

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没有效果一样.有任何想法吗?

vim

9
推荐指数
2
解决办法
5342
查看次数

为什么 pytest 在仅运行测试子集时不加载 conftest.py?

这是我的 API 测试目录布局:

\n
api_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\n
Run Code Online (Sandbox Code Playgroud)\n

conftest.py的内容:

\n
api_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\n
Run Code Online (Sandbox Code Playgroud)\n

me_test.py 的内容:

\n
print("CONFTEST LOADED")\n
Run Code Online (Sandbox Code Playgroud)\n

如果我只是运行pytest,一切正常:

\n
================================================= 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 .                                                                    \n
Run Code Online (Sandbox Code Playgroud)\n

注意打印“CONFTEST LOADED”。伟大的!然而,这个测试运行也获取了我不想要的所有单元测试。我想将我的测试运行分为单元测试和 API 测试,我不想一次性运行它们。

\n

但是,如果我只是运行pytest api_tests/

\n
================================================= 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)

python pytest

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

是否有Python的Cake等价物?

我已经完成了许多"make for Python"项目,但我找不到任何简单的蛋糕文件.我正在寻找的是一个Python等价物,它将让我:

  1. 将构建命令保存在项目根目录中的单个文件中
  2. 将每个任务定义为一个简单的函数,其中的描述将在没有参数的情况下运行"make"文件时自动显示
  3. 导入我的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 build-automation makefile

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