【问题标题】:expected string got property instead预期的字符串得到了属性
【发布时间】:2015-07-05 20:06:31
【问题描述】:

代码sn-p:

def copy_additional_files(self):
try:
    for filetocopy in self.files_to_copy:
        shutil.copy2(FileToCopy.get_source, FileToCopy.get_target)
except NotImplementedError:
    logging.error('keep thinking')
    raise EwaException

get_source 是一个返回字符串的@property - shutil.copy2 需要一个字符串才能工作

我的 IDE (PyCharm 4.0.6) 告诉我它需要一个字符串但得到了一个属性。

这是一个错误吗?一个属性可以返回一个字符串,所以additional_file_source 也可以是一个字符串(正如它所期望的那样),但是当我打印它时它会返回属性对象的对象 ID:

<property object at 0x....> <property object at 0x....>

并抛出:

“属性”不支持缓冲区接口

有没有更简单、更明显的方法来做到这一点而不会出错?

【问题讨论】:

  • 忽略 PyCharm 所说的。代码有效吗?
  • 您收到警告还是实际错误?
  • 它返回属性的对象ID;所以我有一个新问题:如何将返回值分配给 var 名称
  • 它告诉您您正在尝试使用 Property 对象而不是字符串。即一个属性类对象

标签: python dynamic properties pycharm typing


【解决方案1】:

您是在类本身上调用属性,而不是在循环内的类实例上调用该属性。应该是:

for filetocopy in self.files_to_copy:
    shutil.copy2(filetocopy.get_source, filetocopy.get_target)

(另外,请选择更好的名称;get_source 表示您调用的方法,属性应为 source。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多