如何克服Python 3.4 NameError:name' basestring'没有定义

时间:2014-09-30 21:44:54

标签: python-3.4

我在test.py旁边的本地目录中有一个名为hello.txt的文件,其中包含此Python 3.4代码:

import easywebdav
webdav = easywebdav.connect('192.168.1.6', username='myUser', password='myPasswd', protocol='http', port=80)
srcDir = "myDir"
webdav.mkdir(srcDir)
webdav.upload("hello.txt", srcDir)

当我运行时,我得到了这个:

Traceback (most recent call last):
  File "./test.py", line 196, in <module>
    webdav.upload("hello.txt", srcDir)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/easywebdav/client.py", line 153, in upload
    if isinstance(local_path_or_fileobj, basestring):
NameError: name 'basestring' is not defined

通过Google搜索会导致多次点击,所有这些点击point到同一个修补程序,以防将来移动的路径包括“在导入类型之后”:

try:
    unicode = unicode
except NameError:
    # 'unicode' is undefined, must be Python 3
    str = str
    unicode = str
    bytes = bytes
    basestring = (str,bytes)
else:
    # 'unicode' exists, must be Python 2
    str = str
    unicode = unicode
    bytes = str
    basestring = basestring

我没有使用导入类型,但要包含它或不包含它似乎在PyDev中没有区别 - 我得到了错误。导致错误的行是:

unicode = unicode

说'未定义的变量'。

好了我的python知识在这一点上踌躇不前,我在这个网站上找了类似的帖子,没有找到一个特定的基本字符串,我理解帮助。我知道我需要指定basetring但我不知道如何。有人会慈善足以指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

您可以更改easywebdav的client.py文件,例如此签入中的前两项更改:https://github.com/hhaderer/easywebdav/commit/983ced508751788434c97b43586a68101eaee67b

更改包括在client.py中将basestring替换为str

答案 1 :(得分:0)

我想出了一种优雅的模式,不需要修改任何源文件。请注意,可能会将其扩展到其他模块,以将所有“黑客”集中在一个地方:

# py3ports.py
import easywebdav.client
easywebdav.basestring = str
easywebdav.client.basestring = str

# mylib.py
from py3ports import easywebdav