相关疑难解决方法(0)

如何(在运行时)检查一个类是否是另一个类的子类?

假设我有一套西装和四个西装子类:Heart,Spade,Diamond,Club.

class Suit:
   ...
class Heart(Suit):
   ...
class Spade(Suit):
   ...
class Diamond(Suit):
   ...
class Club(Suit):
   ...
Run Code Online (Sandbox Code Playgroud)

我有一个接收套装作为参数的方法,它是一个类对象,而不是一个实例.更确切地说,它可能只收到四个值中的一个:Heart,Spade,Diamond,Club.我怎样才能做出确保这样的事情的断言?就像是:

def my_method(suit):
   assert(suit subclass of Suit)
   ...
Run Code Online (Sandbox Code Playgroud)

我正在使用Python 3.

python assert subclass

176
推荐指数
6
解决办法
9万
查看次数

Python:尝试除了KeyError vs if has_key()

在下面的代码中,什么更有效/更'Pythonic'?使用try-catch子句或if-else子句?

fname = 'AdobeARM.log'

letters = {}

with open(fname,'r') as f:
    for line in f:
        for c in line:
            try:
                letters[c] += 1
            except KeyError:
                letters[c] = 1

print letters
Run Code Online (Sandbox Code Playgroud)

VS.

fname = 'AdobeARM.log'

letters = {}

with open(fname,'r') as f:
    for line in f:
        for c in line:
            if letters.has_key(c):
                letters[c] += 1
            else:
                letters[c] = 1

print letters
Run Code Online (Sandbox Code Playgroud)

我倾向于使用try catch选项,但我不确定为什么.

python performance

18
推荐指数
3
解决办法
4万
查看次数

dict.get()方法返回一个指针

假设我有这段代码:

my_dict = {}
default_value = {'surname': '', 'age': 0}

# get info about john, or a default dict
item = my_dict.get('john', default_value)

# edit the data
item[surname] = 'smith'
item[age] = 68

my_dict['john'] = item
Run Code Online (Sandbox Code Playgroud)

如果我们现在检查default_value的值,问题就变得清晰了:

>>> default_value
{'age': 68, 'surname': 'smith'}
Run Code Online (Sandbox Code Playgroud)

很明显,它my_dict.get()没有返回default_value 的,而是返回指针(?).

可以通过将代码更改为:

item = my_dict.get('john', {'surname': '', 'age': 0})
Run Code Online (Sandbox Code Playgroud)

但这似乎不是一个很好的方法.有什么想法,评论?

python dictionary pass-by-reference

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

在ftplib storbinary中创建缺少的目录

我在python中使用pycurl通过ftp传输文件.我可以使用以下命令在远程服务器上自动创建缺少的目录:

c.setopt(pycurl.FTP_CREATE_MISSING_DIRS, 1)
Run Code Online (Sandbox Code Playgroud)

由于某些原因,我必须切换到ftplib.但我不知道如何在这里相同.是否有任何选项可以添加到storbinary函数来做到这一点?或者我必须手动创建目录?

python pycurl ftplib

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

不使用受保护/受限制的集合的原因

是否有任何理由/参数不实现基于谓词/约束限制其成员的Java集合?

鉴于经常需要这样的功能,我期待它已经在apache-commons或Guava等集合框架上实现.但是,虽然apache确实拥有它,但是Guava 弃用了它的版本,并建议不要使用类似的方法.

Collection接口契约规定的集合可以,只要它是正确记录放在其元素的所有限制,所以我无法理解为什么有人看守的集合将被劝阻.还有什么其他选择可以确保Integer集合永远不会包含负值而不隐藏整个集合?

java collections constraints predicate

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

Python:为什么列表没有find方法?

我试图写一个这个问题的答案,并且很惊讶地发现没有列表的查找方法,列表只有索引方法(字符串有查找和索引).

有人能告诉我背后的理由吗?为什么字符串都有?

python string methods list

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

检查[]运算符

如何在Python中检查对象是否支持[]操作?我想到类似以下内容:

if supports(obj, ?[]?):
    print("Supports")  
Run Code Online (Sandbox Code Playgroud)

python

7
推荐指数
2
解决办法
1646
查看次数

使用try/except或if else创建和验证目录?

这只是一个关于哪一个更"pythonic"的问题

使用if:

import os
somepath = 'c:\\somedir'
filepath = '%s\\thefile.txt' % somepath
if not os.path.exists(somepath) and not os.path.isfile(filepath):
    os.makedirs(somepath)
    open(filepath, 'a').close
else:
   print "file and dir allready exists"
Run Code Online (Sandbox Code Playgroud)

或使用try/Except:

import os
somepath = 'c:\\somedir'
filepath = '%s\\thefile.txt' % somepath
try:
    os.makedirs(somepath)
except:
    print "dir allready exists"
try:
    with open(filepath):
        // do something
except:
    print "file doens't exist"
Run Code Online (Sandbox Code Playgroud)

正如你在上面的例子中看到的那样,哪一个在python上会更正确?另外,在哪些情况下我应该使用try/except而不是if/else?我的意思是,我应该替换所有我的if/else测试来尝试/除外吗?

提前致谢.

python python-2.7

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

测试 PostgreSQL 表是否不存在(使用 psycopg2)

使用 Psycopg2,我需要测试 postgresql 表是否存在。

在类似的问题中,建议使用以下测试:

cursor.execute("select exists(select * from myDb.mytable_%s)" % complementName)
tableExists = cursor.fetchone()[0]
print(tableExists)
Run Code Online (Sandbox Code Playgroud)

如果表已经存在,并且返回 ,则此方法非常有效,但如果表True存在,则此方法不起作用。我没有像我需要的那样返回,而是收到错误False

编程错误:关系“myDb.mytable_001”不存在

我究竟做错了什么?False 如果表不存在,我应该怎么做才能得到语句?谢谢你的帮助!

编辑

根据评论中的建议,我也尝试过:

tableExists = cursor.execute("SELECT 1 AS result FROM pg_database WHERE datname='mytable_001'")
Run Code Online (Sandbox Code Playgroud)

tableExists = cursor.execute("SELECT EXISTS (SELECT 1 AS result FROM pg_tables WHERE schemaname = 'mySchema' AND tablename = 'mytable_001)')")
Run Code Online (Sandbox Code Playgroud)

None无论表是否存在,两者都只是返回 。但是,我不确定语法,也许你可以指出我可能犯的一些新手错误?谢谢!

编辑2 最后,解决方案包括上面后一个查询的组合,并按如下方式获取布尔结果:

cursor.execute("SELECT EXISTS (SELECT 1 AS result FROM pg_tables WHERE schemaname = 'mySchema' AND tablename = …
Run Code Online (Sandbox Code Playgroud)

python postgresql boolean psycopg2

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

在 try/ except 块中创建变量是否被认为是一种不好的做法?

None让我们考虑这个示例 - 返回列表中第一个值的索引li(如果存在)或最后一个元素的索引(如果None不存在于li.

我可以检查列表中是否有 None,但使用 ifs 不是首选方式 - Dive Into Python 鼓励使用异常,因为据说它们更快并使代码更清晰(请参阅问题)。所以我采取了三种方法:

1.

try:
    my_index = li.index(None)
except ValueError:
    my_index = len(li) - 1

print my_index
Run Code Online (Sandbox Code Playgroud)

my_index在 try/ except 块内声明。更少的行数,没有多余的声明。可能的问题 - 不同的异常类型将导致不创建my_index脚本并使其崩溃print

2.

my_index = None  # or anything else
try:
    my_index = li.index(None)
except ValueError:
    my_index = len(li) - 1

print my_index
Run Code Online (Sandbox Code Playgroud)

my_index在 try/except 之前声明,并且无论发生什么异常都会分配一个值。缺点——更多的线条,看起来多余。

3. 编辑:不起作用 - 无论 try/ except 结果如何,finally 都会被执行

try: …
Run Code Online (Sandbox Code Playgroud)

python exception try-catch

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

可读的尝试除了计算处理

我有一个程序,我需要做很多计算,但输入可能不完整(所以我们不能总是计算所有结果),这本身就很好,但是会给代码的可读性带来问题:

def try_calc():
    a = {'1': 100, '2': 200, '3': 0, '4': -1, '5': None, '6': 'a'}
    try:
        a['10'] = float(a['1'] * a['2'])
    except (ZeroDivisionError, KeyError, TypeError, ValueError) as e:
        a['10'] = None
    try:
        a['11'] = float(a['1'] * a['5'])
    except (ZeroDivisionError, KeyError, TypeError, ValueError) as e:
        a['11'] = None
    try:
        a['12'] = float(a['1'] * a['6'])
    except (ZeroDivisionError, KeyError, TypeError, ValueError) as e:
        a['12'] = None
    try:
        a['13'] = float(a['1'] / a['2'])
    except (ZeroDivisionError, KeyError, TypeError, ValueError) as e:
        a['13'] = …
Run Code Online (Sandbox Code Playgroud)

python

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

Python:try-except vs if-else来检查dict键

我遇到的代码我不知何故发现"奇怪".

var = None
try:
  var = mydict[a][b]
except:
  pass
Run Code Online (Sandbox Code Playgroud)

我不太习惯使用try-except检查dict键,显然有一个if-else序列来处理相同的情况.

var = None
if a in mydict:
    if b in mydict[a]:
        var = mydict[a][b]
Run Code Online (Sandbox Code Playgroud)

使用一种方法比另一种方法有任何"明显的"优势/劣势吗?

python if-statement try-catch

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