本篇文章主要写在学习使用python3中遇到的一些问题。
————本人是python小白,如有错误的地方请各位大神指教。
旧的print函数用法为print ‘Hello’,而新的print函数对此改成了print(‘Hello’)并且不再兼容之前版本。
如果在3.X版本上Python上使用旧的print语法,将出现“SyntaxError: invalid syntax”错误。
Python3中用input()取代了raw_input(),当然这仅仅是重命名,使用上并没有不同;
使用repr()函数替换“(注:反单引号,位于键盘1的左边一个键),将一个object转换为string,注意repr()与str()略有不同
exec用来执行存储在字符串或者文件中的Python语句,与JavaScript中的eval()函数类似,新的exec用法为exec(‘print(“Hello”)’)
import xlrd
出现下面错误
"No module named 'xlrd'
原因
python的xlrd库是第三方的,需要另外自行安装。
解决方案
进入windows command 命令行,然后把目录切换到python的安装目录下的Script文件夹,运行 easy_inatall pip, 安装pip命令
利用pip命令,安装xlrd包
pip install xlrd
今天试了一下一段简单的代码:
import urllib2
response = urllib2.urlopen("http://www.baidu.com")
print response.read()
运行后报错:
Traceback (most recent call last):
File "D:/PycharmProjects/network_test/scrapy.py", line 1, in <module>
import urllib2
ImportError: No module named 'urllib2'
自己电脑里装的是python 3.4里面,在3以后用urllib.request代替urllib2,所以改成这样:
import urllib.request
response = urllib.request.urlopen("http://www.baidu.com")
print(response.read())
报错:
Traceback (most recent call last):
File "C:/Users/Window/Desktop/urllib2_test01.py", line 13, in <module>
data = urllib.urlencode(values)
AttributeError: 'module' object has no attribute 'urlencode'
解决:
是python 3版本,要用urllib.parse.urlencode(values)
使用python3.5.1执行post请求时,一直报错"POST data should be bytes or an iterable of bytes. It cannot be of type str.",仔细对照教程后也未发现编写方法没有问题。
最后通过交流发现需要加在urlencode语句后加encode(encoding=‘UTF8’)
eg:
params = urllib.parse.urlencode({'userid':'381fccbd776c4deb'}).encode(encoding='UTF8')
问题解决
#Python2
for line in fr.readlines():
curLine = line.strip().split('\t')
fltLine = map(float, curLine) # 将每个元素转成float类型
dataMat.append(fltLine)
#Python3
for line in fr.readlines():
curLine = line.strip().split('\t')
fltLine = list(map(float,curLine))# 将每个元素转成float类型
dataMat.append(fltLine)
今天使用Python中的pickle存储的时候出现了以下错误:
TypeError: write() argument must be str, not bytes
网上搜索才发现原来是文件打开的方式有问题。
之前文件打开的语句是:
f=open("list.pkl","w+")
然后使用二进制方式打开就没有这个问题:
f=open("list_account.pkl","wb+")
产生问题的原因是因为pickle存储方式默认是二进制方式
fo = open("temp.txt", "wb+")
str = '中文'
str = str.encode('utf-8')
fo.write(str)
fo.close()
import numpy as np
x = np.array([1, 2, 2.5])
x.astype(int)
y = np.array([3, 6, 2], dtype='S32')
y = y.astype('float64')
x - y
1)AttributeError: module ‘tensorflow‘ has no attribute ‘sub‘
#进入一个交互式Tensorflow会话
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.Variable([1.0,2.0])
a = tf.constant([3.0,3.0])
#使用初始化器initalizer op的run()方法初始化‘x‘
x.initializer.run()
#增加一个减法sub op, 从‘x‘减去‘a‘,运行减去op,输出结果
sub = tf.sub(x,a)
print(sub.eval())
# 任务完成,关闭回话
sess.close()
执行时报错:
Traceback (most recent call last):
File "C:/PythonProj/tensorflow/first_tensorflow.py", line 43, in <module>
sub = tf.sub(x,a)
AttributeError: module ‘tensorflow‘ has no attribute ‘sub‘
经过在pycharm中tf.自动反显的信息,我发现原来这个sub函数已经被subtract代替了,换成tf.subtract(x,a) ,ok ,一切顺利!
2)AttributeError: module ‘tensorflow‘ has no attribute ‘mul‘
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2,input3)
mul = tf.mul(input1,intermed)
with tf.Session() as sess:
result = sess.run([mul,intermed])
print(result)
报错信息为:
Traceback (most recent call last):
File "C:/PythonProj/tensorflow/first_tensorflow.py", line 78, in <module>
mul = tf.mul(input1,intermed)
AttributeError: module ‘tensorflow‘ has no attribute ‘mul‘
同理,经过在pycharm中tf.反显信息的观察,我发现原来这个tf.mul函数已经被换成了tf.multiply了,修改后,ok!
input1 = tf.placeholder(tf.types.float32)
解决方案:
将代码更换为~
input1 = tf.placeholder(tf.float32)
mermaid语法说明 ↩︎