小编aIK*_*Kid的帖子

TypeError:只能将列表(不是"str")连接到列表

我正在尝试制作一个用于RPG游戏的库存程序.该程序需要能够添加和删除内容并将其添加到列表中.这是我到目前为止:

inventory=["sword","potion","armour","bow"]
print(inventory)
print("\ncommands: use (remove) and pickup (add)")
selection=input("choose a command [use/pickup]")

if selection=="use":
    print(inventory)
    remove=input("What do you want to use? ")
    inventory.remove(remove)
    print(inventory)

elif selection=="pickup":
    print(inventory)
    add=input("What do you want to pickup? ")
    newinv=inventory+str(add)
    print(newinv)
Run Code Online (Sandbox Code Playgroud)

当我运行它并尝试选择一些东西时,我收到此错误:

Traceback (most recent call last):
  File "H:/Year 10/Computing/A453/Python Programs/inventory.py", line 15, in <module>
    newinv=inventory+str(add)
TypeError: can only concatenate list (not "str") to list
Run Code Online (Sandbox Code Playgroud)

有没有人对此有所解决,将不胜感激

python

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

"预计缩进块"错误?

我无法理解为什么python会出现"预期的缩进块"错误?

""" This module prints all the items within a list"""
def print_lol(the_list):
""" The following for loop iterates over every item in the list and checks whether
the list item is another list or not. in case the list item is another list it recalls the function else it prints the ist item"""

    for each_item in the_list:
        if isinstance(each_item, list):
            print_lol(each_item)
        else:
            print(each_item)
Run Code Online (Sandbox Code Playgroud)

python docstring indentation

19
推荐指数
2
解决办法
22万
查看次数

获取整数和浮点数的属性

我正在使用Python解释器(Python 3.2.3)并尝试以下方法:

>>> dir(1)
Run Code Online (Sandbox Code Playgroud)

这给了我int对象的所有属性和方法.接下来我尝试了:

>>> 1.__class__
Run Code Online (Sandbox Code Playgroud)

然而,这引发了一个例外:

File "<stdin>", line 1
1.__class__
          ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

当我尝试使用浮子时,我得到了我的预期:

>>> 2.0.__class__
<class 'float'> 
Run Code Online (Sandbox Code Playgroud)

为什么intfloat文字表现不同?

python

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

类型检查:不是字符串的可迭代类型

为了更好地解释,请考虑这种简单的类型检查功能:

from collections import Iterable
def typecheck(obj):
    return not isinstance(obj, str) and isinstance(obj, Iterable)
Run Code Online (Sandbox Code Playgroud)

如果obj是可迭代类型str,则返回True.但是,如果obj是a str或不可迭代类型,则返回False.

有没有办法更有效地执行类型检查?我的意思是,检查obj一次的类型看是否不是a 似乎有点多余str,然后再次检查它以查看它是否可迭代.

我想除了str像这样列出所有其他可迭代类型:

return isinstance(obj, (list, tuple, dict,...))
Run Code Online (Sandbox Code Playgroud)

但问题是该方法将错过任何未明确列出的其他可迭代类型.

那么......有什么更好的,或者我在函数中给出的方法效率最高?

python typechecking python-3.x

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

根据安装的库选择动态选择适配器

我正在设计一个具有支持各种库的适配器的库.我希望库在导入特定类时动态选择哪个适配器具有在机器上安装的库.

目标是能够更改程序所依赖的库,而无需对代码进行修改.这个特殊功能用于处理RabbitMQ连接,因为我们遇到了很多关于鼠兔的问题,我们希望能够更改到不同的库,例如pyAMPQrabbitpy,而无需更改底层代码.

我想在__init__.py文件中 实现这样的东西servicelibrary.simple.

try:
    #import pika # Is pika installed?
    from servicelibrary.simple.synchronous import Publisher
    from servicelibrary.simple.synchronous import Consumer
except ImportError:
    #import ampq # Is ampq installed?
    from servicelibrary.simple.alternative import Publisher
    from servicelibrary.simple.alternative import Consumer
Run Code Online (Sandbox Code Playgroud)

然后当用户导入库时

from servicelibrary.simple import Publisher
Run Code Online (Sandbox Code Playgroud)

底层看起来像这样

alternative.py

import amqp

class Publisher(object):
    ......

class Consumer(object):
     ......    
Run Code Online (Sandbox Code Playgroud)

synchronous.py

import pika

class Publisher(object):
    ......

class Consumer(object):
     ......   
Run Code Online (Sandbox Code Playgroud)

当未安装第一个时,这将自动选择第二个.

是否有更好的方法来实现这样的事情?如果有人可以将库/适配器链接到类似的实现,这也是有用的.

[编辑]

实现这样的事最简洁的方法是什么?在将来,我还希望能够更改默认首选项.最终我可能只是满足于使用安装的库,因为我可以控制它,但它将是一个很好的功能.

Alexanders的建议很有意思,但我想知道是否有更清洁的方式.

[EDIT2]

最初的例子被简化了.每个模块可能包含多种类型的导入,例如Consumer和Publisher.

python module adapter libraries python-2.7

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

Django - 使用related_name '+'?

在 Django1.5 文档中,有一节是关于related_name. 最后一段是“如果您不希望 Django 创建向后关系,请设置related_name为 '+' 或以 '+' 结尾。

例如,这将确保用户模式不会有倒退与此相关的模型:user = models.ForeignKey(User, related_name='+')。我什么时候应该使用“+” related_name

python django

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

比较Python 2.7.5中的字符串和unicode

我想知道为什么当我做:

a = [u'k',u'?',u'?']
Run Code Online (Sandbox Code Playgroud)

然后键入:

'k' in a
Run Code Online (Sandbox Code Playgroud)

我得到了True,同时:

'?' in a
Run Code Online (Sandbox Code Playgroud)

会给我False吗?

这真的让我很头疼,似乎有人故意让这个让人发疯...

python python-2.7 python-unicode

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

运行python脚本的问题由执行pscp的Windows任务调度程序运行

不确定是否有人遇到此问题,但我会采取故障排除和/或替代方法的建议.

我有一台Windows 2008服务器,我正在运行几个计划任务.其中一个任务是python脚本,它使用pscp登录到linux框,检查新文件,如果有新内容,则将它们复制到C:盘上的本地目录.我也在关键点对脚本进行了一些记录,我正在使用logging.basicConfig(level=DEBUG).

我使用变量构建了命令,command = 'pscp -pw xxxx name@ip:/ c:\local_dir'然后subprocess.call(command)用来执行命令.

现在这里是奇怪的部分.如果我从命令行手动运行脚本,它可以正常工作.下载并处理新文件.但是,如果任务计划程序运行该脚本,则不会下载任何新文件.该脚本在同一用户下运行,但产生不同的结果.

根据脚本和linux框创建的日志文件,脚本成功登录到linux框.但是,尽管存在新文件,但不会下载任何文件.同样,当我通过命令行运行它时,会下载文件.

有任何想法吗?建议,替代方法?

谢谢.

python scp scheduled-tasks

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

如何在python中导入静态库?

我有一个静态库(liba.a),我想在python中使用它

import只能在python中导入动态库

如何在python中导入静态库?

python import static-libraries

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

python:二进制文件的正则表达式搜索模式(半个字节)

我使用以下正则表达式模式在二进制文件中搜索0xDEAD4FAD:

my_pattern = re.compile(b"\xDE\xAD\x4F\xAD")
Run Code Online (Sandbox Code Playgroud)

但是如何推广搜索模式以搜索0xDEAD4xxx?似乎无法切入半个字节

python regex binaryfiles

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