相关疑难解决方法(0)


Python super()引发了TypeError

在Python 2.5中,以下代码引发了TypeError:

>>> class X:
      def a(self):
        print "a"

>>> class Y(X):
      def a(self):
        super(Y,self).a()
        print "b"

>>> c = Y()
>>> c.a()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in a
TypeError: super() argument 1 must be type, not classobj
Run Code Online (Sandbox Code Playgroud)

如果我更换class Xclass X(object),它会奏效.对此有何解释?

python inheritance python-2.x super

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

Python中常见的陷阱

可能重复:
Python 2.x陷阱和地雷

今天,多年后我被可变的默认参数再次咬了.除非需要,我通常不会使用可变的默认参数,但我认为随着时间的推移我忘了这一点.今天在应用程序中,我在PDF生成函数的参数列表中添加了tocElements = [],现在每次调用"generate pdf"后,"目录"变得越来越长.:)

我还应该在我的列表中添加什么才能避免?

  • 始终以相同的方式导入模块,例如,from y import x并将import x视为不同的模块.

  • 不要使用范围代替列表因为range()无论如何都将成为迭代器,以下将失败:

    myIndexList = [0, 1, 3]
    isListSorted = myIndexList == range(3)  # will fail in 3.0
    isListSorted = myIndexList == list(range(3))  # will not
    
    Run Code Online (Sandbox Code Playgroud)

    使用xrange可能会错误地做同样的事情:

    myIndexList == xrange(3)
    
    Run Code Online (Sandbox Code Playgroud)
  • 小心捕获多种异常类型:

    try:
        raise KeyError("hmm bug")
    except KeyError, TypeError:
        print TypeError
    
    Run Code Online (Sandbox Code Playgroud)

    这打印出"嗯bug",虽然它不是一个bug; 看起来我们正在捕获这两种类型的异常,但我们只将KeyError作为变量TypeError捕获,而是使用它:

    try:
        raise KeyError("hmm bug")
    except (KeyError, TypeError):
        print TypeError
    
    Run Code Online (Sandbox Code Playgroud)

python

75
推荐指数
20
解决办法
2万
查看次数

用于Perl程序员的Python

我是一位经验丰富的Perl开发人员,具有一定程度的经验和/或熟悉其他语言(C/C++的工作经验,Java和Scheme的学校经验,以及熟悉其他许多人).

我可能需要在Python中完成一些Web工作(最直接的,与Google App Engine相关).因此,我想问一下如何为那些来自Perl背景的人最好地学习Python提供很好的参考(例如,重点是两者之间的差异以及如何将perl idiomatics翻译成Python惯用语,而不是通用Python参考).以Web开发为中心的东西甚至更好.我会接受任何东西 - 文章,教程,书籍,示例应用程序?

谢谢!

python perl

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

一般的PHP地雷

其他人在编写PHP Web应用程序时发现了什么惊喜?编译时类继承是众所周知的问题,但我知道其他几个问题,并且想要尝试构建一个语言的顶层问题列表.

注意:

作为一名高级PHP5开发人员,我担任过多个职位,因此PHP工作支付我的账单,这个问题并不意味着将PHP作为一种语言,因为我使用过的每一种语言都有一些众所周知或不那么知名的惊喜.

php performance

35
推荐指数
10
解决办法
2139
查看次数

Python列表问题

蟒蛇:

m=[[0]*3]*2
for i in range(3):
    m[0][i]=1

print m
Run Code Online (Sandbox Code Playgroud)

我希望这段代码可以打印出来

[[1, 1, 1], [0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

但它打印出来

[[1, 1, 1], [1, 1, 1]] 
Run Code Online (Sandbox Code Playgroud)

python list

10
推荐指数
2
解决办法
2700
查看次数

Python Cmd模块,子类化问题

我正在尝试找出这段代码中没有用的东西:

#!/usr/bin/python

import cmd

class My_class (cmd.Cmd):
    """docstring for Twitter_handler"""
    def __init__(self):
        super(My_class, self).__init__()

if __name__ == '__main__':
    my_handler = My_class()
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

Traceback (most recent call last):
  File "main.py", line 12, in <module>
    my_handler = My_class()
  File "main.py", line 9, in __init__
    super(My_class, self).__init__()
TypeError: super() argument 1 must be type, not classobj
Run Code Online (Sandbox Code Playgroud)

如果我将"My_c​​lass"的超类更改为对象,它可以正常工作.我哪里错了?

python

6
推荐指数
2
解决办法
1561
查看次数

Python - 在类中声明属性的约定是什么?

在 Python 中,我可以在整个类中声明属性。例如 :

class Foo:
def __init__(self):
    self.a = 0

def foo(self):
    self.b = 0
Run Code Online (Sandbox Code Playgroud)

当我有一个包含很多属性的大类时,很难检索我的类中的所有属性。

使用以下代码 (a) 还是下一个以下代码 (b) 更好:

a)在这里,很难找到所有属性:

class Foo:
    def __init__(self):
        foo_1()
        foo_2()

    def foo_1(self):
        self.a = 0
        self.b = 0

    def foo_2(self):
        self.c = 0
Run Code Online (Sandbox Code Playgroud)

b)在这里,很容易找到所有属性,但它漂亮吗?

class Foo:
    def __init__(self):
        (self.a, self.b) = foo_1()
        self.c = foo_2()

    def foo_1(self):
        a = 0
        b = 0
        return (a, b)

    def foo_2(self):
        c = 0
        return c
Run Code Online (Sandbox Code Playgroud)

简而言之,在类中声明属性的约定是什么?

编辑:

当然,这是一个简单的例子,这里不需要改进我的代码。想象一下一个复杂的类,它有很多在_init_ () 中调用的“小方法”(用来分割我的代码,提高可读性)。

python convention coding-style

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

TypeError:'int'对象不可迭代?

我正在实现动态编程算法,我得到了这个错误.这是我的代码:

def shoot(aliens):
    s=[0]*10
    s[0]=0
    s[1]=0
    for j in xrange(2,len(aliens)):
        for i in xrange(0,j):
           s[j]=max(s[i] + min(aliens[j],fib(j-i))) <---Error here
    print s[len(aliens)-1]
    return s[len(aliens)-1]

def fib(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    return fib(n-1) + fib(n-2)

aliens=[1,10,10,1]
print shoot(aliens)
Run Code Online (Sandbox Code Playgroud)

它说:

Traceback (most recent call last):
File "module1.py", line 30, in <module>
print shoot(aliens)
File "module1.py", line 19, in shoot
s[j]=max(s[i] + min(aliens[j],fib(j-i)))
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

请帮我

更新:哦,我明白了.我的意思是

s[j]=max(s[i] + min(aliens[j],fib(j-i)))
Run Code Online (Sandbox Code Playgroud)

但我错了.所以,我编辑它,但我不知道如何使用max()来取出数组中最大的.

    b=0 …
Run Code Online (Sandbox Code Playgroud)

python

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

在Python中初始化关键字args

为什么如下:

class A(object):
    def __init__(self, var=[]):
        self._var = var
        print 'var = %s %s' % (var, id(var))

a1 = A()
a1._var.append('one')

a2 = A()
Run Code Online (Sandbox Code Playgroud)

造成:

var = [] 182897439952
var = ['one'] 182897439952
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在使用可选关键字参数时它没有使用列表的新实例,有人能解释一下吗?

python arguments initialization instantiation

0
推荐指数
1
解决办法
255
查看次数