Python3基础——遇到问题汇总

Python3基础——遇到问题汇总

本篇文章主要写在学习使用python3中遇到的一些问题。
————本人是python小白,如有错误的地方请各位大神指教。

1、print()函数

旧的print函数用法为print ‘Hello’,而新的print函数对此改成了print(‘Hello’)并且不再兼容之前版本。
如果在3.X版本上Python上使用旧的print语法,将出现“SyntaxError: invalid syntax”错误。

2、raw_input()与input()

Python3中用input()取代了raw_input(),当然这仅仅是重命名,使用上并没有不同;

3、比较符号,使用!=替换<>

4、repr函数

使用repr()函数替换“(注:反单引号,位于键盘1的左边一个键),将一个object转换为string,注意repr()与str()略有不同

5、exec()函数

exec用来执行存储在字符串或者文件中的Python语句,与JavaScript中的eval()函数类似,新的exec用法为exec(‘print(“Hello”)’)

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

6. Windows下,"No module named ‘xlrd’ "的解决办法

  1. 问题描述
    windows10下,python代码中引用头文件
 import xlrd

出现下面错误

     "No module named 'xlrd'
  1. 原因
    python的xlrd库是第三方的,需要另外自行安装。

  2. 解决方案
    进入windows command 命令行,然后把目录切换到python的安装目录下的Script文件夹,运行 easy_inatall pip, 安装pip命令

利用pip命令,安装xlrd包

pip install xlrd

7. ImportError: No module named ‘urllib2’

今天试了一下一段简单的代码:

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())

8. 解决python3 AttributeError: ‘module’ object has no attribute ‘urlencode’

报错:

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)

9. python3.x执行post请求时报错“POST data should be bytes or an iterable of bytes…”的解决方法

使用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')

问题解决

10. 将列表中的每个元素转成float(Python2与Python3的区别)

#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)

11. Python错误TypeError: write() argument must be str, not bytes

今天使用Python中的pickle存储的时候出现了以下错误:

TypeError: write() argument must be str, not bytes

网上搜索才发现原来是文件打开的方式有问题。

之前文件打开的语句是:

f=open("list.pkl","w+")

然后使用二进制方式打开就没有这个问题:

f=open("list_account.pkl","wb+")

产生问题的原因是因为pickle存储方式默认是二进制方式

Python 读写文件 中文乱码

fo = open("temp.txt", "wb+")
str = '中文'
str = str.encode('utf-8')
fo.write(str)
fo.close()

12. python TypeError: ufunc ‘subtract’ did not contain a loop with signature matching types dtype(‘S32’)

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

13. tensorflow官方文档中的sub 和mul中的函数已经在API中改名了

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!

14. AttributeError: module ‘tensorflow’ has no attribute ‘types’

input1 = tf.placeholder(tf.types.float32)

解决方案:
将代码更换为~

input1 = tf.placeholder(tf.float32)

  1. mermaid语法说明 ↩︎

你可能感兴趣的:(python)