当前位置:首页 > 教育综合 > 正文

argument 1 must be pygame.Surface, not str 怎么办,在线等

运行软件,Python代码出错提示(我的版本是3.6.7): TypeError: write() argument must be str, not bytes

提示write输入的参数是字符串类型str,不是字节类型bytes。

在python3中,不能以任何隐式方式将str和bytes类型二者混合使用。不可以将str和bytes类型进行拼接,不能在str中搜索bytes数据(反之亦然),也不能将str作为参数传入需要bytes类型参数的函数(反之亦然)。

问题应该是出在了s.encode('acsii')上

strings可以被编码(encode)成字bytes,bytes也可以解码(decode)成strings:

>>>'€20'.encode('utf-8')
b'\xe2\x82\xac20'
>>>b'\xe2\x82\xac20'.decode('utf-8')
'€20'

python3.4 安装setuptools报错

看报错估计是读注册表的时候出现了错误。我没有遇到过,查了下资料,有两个说法,一个比较直接。

  1. 下载和安装win32all: http://python.net/crew/skippy/win32/Downloads.html.

  2. 这个需要一点点调试. 具体方法:

    >>> import winreg
    >>> hkcr=winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, '')
    >>> for i in range(999999):
    key=winreg.EnumKey(hkcr,i)
    if '\0' in key: print(repr(key))
    If that throws a "No more data available" error without printing any
    keys, then this isn't your problem.
    Alternatively, you could hack C:\Python\lib\mimetypes.py to print out
    subkeyname before attempting to open it. That would at least tell you
    what the offending key is. My suspicion at the moment is that you may
    have a corrupted registry, or else there's something that's possible
    that the winreg module doesn't expect.


你可以参考一下。

Python unittest 问题?

ddt.data中的数据有误 如果你直接是字符串的话,应该没有unpack的。 unpack的意思是解包,解包一般是解列表,元组和字典型,字符串不能被解包。

python TypeError: must be str, not NoneType怎么解决

出现这种情况一般都是获取内容时得到的是json格式数据或者说是字典格式数据,然后把json格式数据写入文件时才会报错。解决方法如下:

1、首先在Python中可以调用json模块以处理json格式数据,这样json格式数据便可以转换成字符串了。

2、如图,转换方法就是dumps(),然后把转换后的字符串赋值给aa即可。

3、这样执行的时候就不会报错了,但是这样直接写入文件会出现\u乱码,这就涉及到编码问题了。

4、所以要在dumps里面添加一个参数,ensure_ascii,并且设置为FALSE选项才可以。

5、最后再次运行即可把字典的内容成功的写入到文件当中去了。

Python:报错类型是typeerror:must be str not int,求解答

第一关于

super().__init__()

这种不指定子类的继承方法是在Python 3中新加入的,因为你使用的是Python 2, 所以会报错。
第二,关于TypeError,请题主在定义两个父类的时候加入他们的父类(object),如下,再尝试一次,因为Python 2中的classobj不算做一种type,如果你用Python 3的话应该就没有这种问题了。
classBase1(object):
def__init__(self):
print"我是Base1"

classBase2(object):
def__init__(self):
print"我是Base2"

另外一点题外话,题主对Base这个子类采用了双重继承,即此子类同时拥有两个父类(Base1和Base2),这种继承方法有时容易造成混乱,即如果两个父类有相同的方法名或变量名时,无法确定应继承哪一个。因此在诸如Java等语言中多重继承是不允许的。Python允许多重继承,但在这种情况下为了避免混乱,Python会自动按顺序选择拥有所需方法名的第一个父类并执行,而忽略其他父类中的同名方法。比如你的
classBase(Base1,Base2):
def__init__(self):
super(Base,self).__init__()

中,使用
super(Base,self).__init__()

来呼叫Base父类的__init__方法,由于Base的父类有两个(Base1和Base2),并且两个都有__init__方法,所以Python默认只按顺序呼叫Base1的__init__方法而忽略Base2的。这样你运行
bbbb=Base()

时就只会显示
我是Base1

而不会显示“我是Base2”。如果你要使用super()方法并希望像使用
classBase(Base1,Base2):
def__init__(self):
Base1.__init__(self)
Base2.__init__(self)

时一样同时输出“我是Base1”和“我是Base2”的话,你需要修改代码使Base2为Base1的子类,Base为Base2的子类才可以。如下:
classBase1(object):
def__init__(self):
print"我是Base1"

classBase2(Base1):
def__init__(self):
super(Base2,self).__init__()
print"我是Base2"

classBase(Base2):
def__init__(self):
super(Base,self).__init__()

这样你运行
bbbb=Base()

时才会输出
我是Base1
我是Base2

展开全文阅读