相关疑难解决方法(0)

如何检查变量是否存在?

我想检查变量是否存在.现在我正在做这样的事情:

try:
   myVar
except NameError:
   # Do something.
Run Code Online (Sandbox Code Playgroud)

还有其他方法没有例外吗?

python variables exception

849
推荐指数
9
解决办法
91万
查看次数

什么时候抛出异常?

我为我的应用程序不期望的每个条件创建了异常. UserNameNotValidException,PasswordNotCorrectException等等.

但是我被告知我不应该为这些条件创建例外.在我的UML中,那些是主流的例外,为什么它不应该是例外?

创建例外的任何指导或最佳实践?

language-agnostic exception

409
推荐指数
12
解决办法
14万
查看次数

检查变量是否在python中定义的简单方法?

有没有办法检查是否定义了具有指定名称的变量(类成员或独立)?例:

if "myVar" in myObject.__dict__ : # not an easy way
  print myObject.myVar
else
  print "not defined"
Run Code Online (Sandbox Code Playgroud)

python

35
推荐指数
4
解决办法
6万
查看次数

Python中的条件编译

如何在Python中进行条件编译?

它使用DEF吗?

python conditional-compilation

17
推荐指数
3
解决办法
2万
查看次数

Python例外:EAFP和什么是真正的例外?

在一些地方(这里这里)已经说过,Python强调"请求宽恕而不是许可"(EAFP)应该通过以下观点来缓和,即异常只应在真正特殊情况下调用.考虑以下内容,我们将弹出并推送优先级队列,直到只剩下一个元素:

import heapq
...
pq = a_list[:]
heapq.heapify(pq)
while True:
    min1 = heapq.heappop(pq)
    try:
        min2 = heapq.heappop(pq)
    except IndexError:
        break
    else
        heapq.heappush(pq, min1 + min2)
# do something with min1
Run Code Online (Sandbox Code Playgroud)

异常仅在len(a_list)循环的迭代中引发一次,但它并不是特别的,因为我们知道它最终会发生.这个设置使我们a_list无需检查是否空了很多次,但(可能)它比使用显式条件更不易读.

对这种非特殊程序逻辑使用异常的共识是什么?

python exception

15
推荐指数
3
解决办法
2302
查看次数

在内部函数内部分配外部变量的python闭包

我有这段代码:

#!/usr/bin/env python

def get_match():
  cache=[]
  def match(v):
    if cache:
      return cache
    cache=[v]
    return cache
  return match
m = get_match()
m(1)
Run Code Online (Sandbox Code Playgroud)

如果我运行它,它说:

UnboundLocalError: local variable 'cache' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

#!/usr/bin/env python

def get():
  y = 1
  def m(v):
    return y + v
  return m

a=get()
a(1)
Run Code Online (Sandbox Code Playgroud)

它运行.

列表中有什么东西吗?或者我的代码组织错了?

python closures scope python-2.x

15
推荐指数
2
解决办法
3845
查看次数

在python中是否有类似于ruby的|| =的表达式

我在Ruby中遇到了一个有趣的表达:

a ||= "new"
Run Code Online (Sandbox Code Playgroud)

这意味着如果未定义a,则将"new"值分配给a; 否则,a将与它相同.在进行一些数据库查询时很有用.如果设置了该值,我不想触发另一个数据库查询.

所以我在Python中尝试了类似的思维方式:

a = a if a is not None else "new"
Run Code Online (Sandbox Code Playgroud)

它失败了.我认为这是因为你不能在Python中做"a = a",如果a没有定义.

所以我可以出来的解决方案是检查locals()和globals(),或者使用try ... except表达式:

myVar = myVar if 'myVar' in locals() and 'myVar' in globals() else "new"
Run Code Online (Sandbox Code Playgroud)

要么

try:
    myVar
except NameError:
    myVar = None

myVar = myVar if myVar else "new"
Run Code Online (Sandbox Code Playgroud)

我们可以看到,解决方案并不那么优雅.所以我想问一下,有没有更好的方法呢?

ruby python expression

5
推荐指数
2
解决办法
531
查看次数

是否可以使用python / pytest来测试测试相关性是否尚未泄漏到真实代码中

TL; DR:如果我使用的pytest还有其他一些仅测试的依赖项,是否可以断言这些仅测试的依赖项没有泄漏到实际的非测试代码中?

在Java中,当我运行测试时,测试本身和被测代码将在不同的类加载器中运行,并且它们的依赖关系在此作用域内。因此,如果无意中引用testng了被测代码,则即使testng正在运行测试,测试也将失败。

可以在Python中实现吗?如果我的非测试代码不小心导入了pytest,我可以抓住它并使测试失败吗?我看不到如何实现这一目标。

虽然setuptoolspip等,使其比较容易保持安装/运行和开发/测试的依赖分开,甚至避免污染当前VENV,他们仍然存在测试运行时。这意味着python setup.py test可以通过模块运行,但是python setup.py install导入该模块之后却很简单。

鉴于: cat setup.py

from setuptools import setup, find_packages

setup(
    name="brettpy",
    version="0.0.1",
    packages=find_packages(),
    setup_requires=["pytest-runner",],
    tests_require=["pytest",],
)
Run Code Online (Sandbox Code Playgroud)

cat setup.cfg

[aliases]
test=pytest
Run Code Online (Sandbox Code Playgroud)

cat brettpy/__init__.py

import pytest
Run Code Online (Sandbox Code Playgroud)

cat tests/test_brettpy.py

def test_import_brettpy():
    import brettpy
    del brettpy

def test_run_main():
    from brettpy import __main__ as main
    main.main()
Run Code Online (Sandbox Code Playgroud)

... python setup.py test将通过,但python setup.py install && python -m brettpy失败:

ModuleNotFoundError: No …
Run Code Online (Sandbox Code Playgroud)

python pytest

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

用于Python变量初始化

对于Python变量(例如List和integer),如果我们不初始化它,它们总是None吗?是否有任何情况Python即使我们没有明确初始化它也会为我们做初始化?

对于初始化,我的意思是,

Foo = []
Goo = 0
Run Code Online (Sandbox Code Playgroud)

林先生,提前谢谢

python initialization

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

如果变量不是 None 并且大于一行中的某个值,如何在 python 中检查?

如何在一行中做出这个声明?

if x is not None:
    if x > 0:
        pass
Run Code Online (Sandbox Code Playgroud)

如果我只用“和”写,如果没有,它会显示异常

if x is not None and x > 0:
     pass
Run Code Online (Sandbox Code Playgroud)

python python-2.7

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