相关疑难解决方法(0)

__enter__`方法的返回值在python中应始终为`self`吗?

__enter__方法的返回值不应该self始终是。

Python文档说:

object.__enter__(self) 输入与此对象相关的运行时上下文。with语句会将此方法的返回值绑定到该语句的as子句中指定的目标(如果有)。

这样做,为了做任何实际的事情,不self应该总是从__enter__类的方法中返回它,否则,就不能从上下文中调用其他类方法。

例如,在下面的代码中,s.main()可以正常工作,但b1.main()会出错。

class a(object):
    def __init__(self):
        pass

    def __enter__(self):
        return self

    def __exit__(self ,type, value, traceback):
        return self

    def main(self):
        print " in a::main self %d " , id(self)


class b(object):
    def __init__(self):
        pass

    def __enter__(self):
        return "something else"

    def __exit__(self ,type, value, traceback):
        pass

    def main(self):
        print "in b::main !! self id " , id(self)

with a() as s:
    s.main()

with b() as b1:
    b1.main()

s …
Run Code Online (Sandbox Code Playgroud)

python

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

如何确保按照通常(但不正确)的预期在 Python 类上调用 __del__ 函数?

我知道__del__Python 类的函数并没有像许多人期望的那样被处理:作为析构函数。

我还了解到,有更多“Pythonic”并且可以说是更优雅的整理方法,特别是使用with 构造

然而,当编写可能被不太熟悉 python 方式的读者使用的代码时,当清理很重要时,是否有一种优雅的方法可以让我简单地__del__可靠地作为析构函数工作,而不干扰 python 的自然使用__del__

作为析构函数的期望__del__似乎并非不合理,同时也很常见。所以我只是想知道是否有一种优雅的方式让它按照预期工作——忽略关于它的 Python 优点的许多争论。

python python-2.7 python-3.x

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

在 __del__ 中关闭类似连接的对象的 Pythonic 方法

我正在研究一个实现上下文管理器的类似连接的对象。强烈鼓励写这样的东西:

with MyConnection() as con:
    # do stuff
Run Code Online (Sandbox Code Playgroud)

当然也可以这样做:

con = MyConnection()
# do stuff
con.close()
Run Code Online (Sandbox Code Playgroud)

但未能关闭连接是相当有问题的。所以关闭__del__()似乎是一个好主意:

def __del__(self):
    self.close()
Run Code Online (Sandbox Code Playgroud)

这看起来很不错,但有时会导致错误:

Exception ignored in: [...]
Traceback (most recent call last):
  File "...", line xxx, in __del__()
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)

看起来好像有时 close 方法已经被销毁,当__del__()被调用时。

所以我正在寻找一种很好的方法来鼓励 python 在破坏时正确关闭连接。如果可能的话,我想,以避免代码重复close()__del__()

python

4
推荐指数
1
解决办法
4455
查看次数

UnboundLocalError:赋值前引用的局部变量'cursor'

所以我是一个新手但是正在使用flask/MYSQL中的注册系统表单

我收到此错误(UnboundLocalError:赋值前引用的局部变量'cursor')

经过几个小时的代码和研究,我需要你的帮助.

这是我的档案,如果我需要分享其他任何内容,请告诉我.谢谢

from flask import Flask, render_template, json, request
from flask.ext.mysqldb import MySQL
from werkzeug import generate_password_hash, check_password_hash

app = Flask(__name__)
mysql = MySQL()


app.config['MYSQL_DATABASE_USER'] = 'x'
app.config['MYSQL_DATABASE_PASSWORD'] = 'x'
app.config['MYSQL_DATABASE_DB'] = 'x'
app.config['MYSQL_DATABASE_HOST'] = 'x'
mysql.init_app(app)

@app.route('/')
def main():
    return render_template('index.html')

@app.route('/login')
def login():
    return render_template('login.html')

@app.route('/showSignUp')
def showSignUp():
    return render_template('signup.html')


@app.route('/signUp',methods=['POST','GET'])
def signUp():
    try:
        _name = request.form['inputName']
        _email = request.form['inputEmail']
        _password = request.form['inputPassword']

        # validate the received values
        if _name and _email and _password:

            # All …
Run Code Online (Sandbox Code Playgroud)

python mysql sqlalchemy mysql-python flask

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

无法在任何类中调用析构函数

我想在一个类中使用ConfigParser,它需要来自析构函数的调用,但随后会发生奇怪的事情.

这是我的代码:

"""
function name is 
test  ok!
test1 failed!
test2 failed!
test3 failed!

test4
...  ok!

"""

def test3():
  pass

class Class1:
  def __del__(self):
    test3()

if __name__=="__main__":
  obj=Class1()
Run Code Online (Sandbox Code Playgroud)

如果函数被命名test1,test2或者test3,将引发异常,我无法捕获它try except.

追溯是:

E:\tc.py
Exception TypeError: "'NoneType' object is not callable" in <bound method Class1.__del__ of <__main__.Class1 instance at 0x00C18F58>> ignored
Run Code Online (Sandbox Code Playgroud)

太奇怪了!你能在你的系统中测试它吗?或者我做错了什么?

python

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

从列表中调用元素的析构函数

我有类似的东西:

a = [instance1, instance2, ...]
Run Code Online (Sandbox Code Playgroud)

如果我做了

del a[1]
Run Code Online (Sandbox Code Playgroud)

instance2从列表中删除,但是实例2的析构函数方法是否被调用?

我对此感兴趣,因为我的代码使用了大量内存,我需要释放内存从列表中删除实例.

python destructor list

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