

太好了!终于梳理清楚Python多线程与多进程!
source link: https://segmentfault.com/a/1190000041224544
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

太好了!终于梳理清楚Python多线程与多进程!
对于刚入门的Pythoner在学习过程中运行代码是或多或少会遇到一些错误,刚开始可能看起来比较费劲。随着代码量的积累,熟能生巧当遇到一些运行时错误时能够很快的定位问题原题。下面整理了常见的17个错误,希望能够帮助到大家。
1、
忘记在if,for,def,elif,else,class等声明末尾加 :会导致“SyntaxError : invalid syntax”如下:
if spam == 42 print('Hello!')
2、
使用= 而不是 ==
也会导致“SyntaxError: invalid syntax”= 是赋值操作符而 == 是等于比较操作。该错误发生在如下代码中:
if spam = 42: print('Hello!')
3、
错误的使用缩进量导致“IndentationError: unexpected indent”、“IndentationError: unindent does not match any outer indetation level”以及“IndentationError: expected an indented block”记住缩进增加只用在以:结束的语句之后,而之后必须恢复到之前的缩进格式。该错误发生在如下代码中:
print('Hello!') print('Howdy!')
if spam == 42: print('Hello!') print('Howdy!')
4、
在 for 循环语句中忘记调用 len()
导致“TypeError: 'list' object cannot be interpreted as an integer”
通常你想要通过索引来迭代一个list或者string的元素,这需要调用 range() 函数。要记得返回len 值而不是返回这个列表。
该错误发生在如下代码中:
spam = ['cat', 'dog', 'mouse'] for i in range(spam): print(spam[i])
5、 尝试修改string的值导致“TypeError: 'str' object does not support item assignment”string是一种不可变的数据类型,该错误发生在如下代码中:
spam = 'I have a pet cat.' spam[13] = 'r' print(spam)
而正确做法是:
spam = 'I have a pet cat.' spam = spam[:13] + 'r' + spam[14:] print(spam)
6、 尝试连接非字符串值与字符串导致 “TypeError: Can't convert 'int' object to str implicitly”该错误发生在如下代码中:
numEggs = 12 print('I have ' + numEggs + ' eggs.')
而正确做法是:
numEggs = 12 print('I have ' + str(numEggs) + ' eggs.') numEggs = 12 print('I have %s eggs.' % (numEggs))
7、 在字符串首尾忘记加引号导致“SyntaxError: EOL while scanning string literal”该错误发生在如下代码中:
print(Hello!') print('Hello!) myName = 'Al' print('My name is ' + myName + . How are you?')
8、
变量或者函数名拼写错误导致“NameError: name 'fooba' is not defined”该错误发生在如下代码中:
foobar = 'Al' print('My name is ' + fooba) spam = ruond(4.2) spam = Round(4.2)
9、 方法名拼写错误导致 “AttributeError: 'str' object has no attribute 'lowerr' ”该错误发生在如下代码中:
spam = 'THIS IS IN LOWERCASE.' spam = spam.lowerr()
10、
引用超过list最大索引导致“IndexError: list index out of range”该错误发生在如下代码中:
spam = ['cat', 'dog', 'mouse'] print(spam[6])
11、 使用不存在的字典键值导致“KeyError:‘spam’”该错误发生在如下代码中:
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'} print('The name of my pet zebra is ' + spam['zebra'])
12、 尝试使用Python关键字作为变量名导致“SyntaxError:invalid syntax”Python关键不能用作变量名,该错误发生在如下代码中:
class = 'algebra'
Python3的关键字有:and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield
13、
在一个定义新变量中使用增值操作符
导致“NameError: name 'foobar' is not defined”
不要在声明变量时使用0或者空字符串作为初始值,这样使用自增操作符的一句spam += 1等于spam = spam + 1,这意味着spam需要指定一个有效的初始值。
该错误发生在如下代码中:
spam = 0 spam += 42 eggs += 42
14、 在定义局部变量前在函数中使用局部变量(此时有与局部变量同名的全局变量存在)导致“UnboundLocalError: local variable 'foobar' referenced before assignment”在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的,使用规则是:如果在函数中定义了任何东西,如果它只是在函数中使用那它就是局部的,反之就是全局变量。这意味着你不能在定义它之前把它当全局变量在函数中使用。该错误发生在如下代码中:
someVar = 42 def myFunction(): print(someVar) someVar = 100 myFunction()
15、 尝试使用 range()创建整数列表导致“TypeError: 'range' object does not support item assignment”有时你想要得到一个有序的整数列表,所以 range() 看上去是生成此列表的不错方式。然而,你需要记住 range() 返回的是 “range object”,而不是实际的 list 值。该错误发生在如下代码中:
spam = range(10) spam[4] = -1
正确写法:
spam = list(range(10)) spam[4] = -1
(注意:在 Python 2 中 spam = range(10) 是能行的,因为在 Python 2 中 range() 返回的是list值,但是在 Python 3 中就会产生以上错误)
16、 不存在 ++ 或者 -- 自增自减操作符。导致“SyntaxError: invalid syntax”如果你习惯于例如 C++ , Java , PHP 等其他的语言,也许你会想要尝试使用 ++ 或者 -- 自增自减一个变量。在Python中是没有这样的操作符的。该错误发生在如下代码中:
spam = 1 spam++
正确写法:
spam = 1 spam += 1
17、 忘记为方法的第一个参数添加self参数导致“TypeError: myMethod() takes no arguments (1 given) ”该错误发生在如下代码中:
class Foo(): def myMethod(): print('Hello!') a = Foo() a.myMethod()
Recommend
-
19
多进程和多线程 一、进程 1.1 进程的引入 现实生活中,有很多的场景中的事情是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的;试想,如果把唱歌和跳舞这2件事情分开...
-
32
Python线程池与进程池 前言 前面我们已经将线程并发编程与进程并行编程全部摸了个透,其实我第一次学习他们的时候感觉非常困难甚至是吃力。因为概念实在是太多了,各种锁,数据共享...
-
29
Java技术栈 www.javastack.cn 关注阅读更多优质文章 本文授权转自公众号:17codi...
-
8
终于理清楚了GPU流水线顺序和细节...欢迎补充,挑错--- 几何阶段 ---1 Vertex Shader - 顶点着色器2 Tessellation Shader - 曲面细分着色器3 Geometry Shader - 几何着色器4 Clipping 裁剪 (坐标转为齐次裁减空...
-
8
想必大家一定听说过Nginx,若没听说过它,那么一定听过它的“同行”Apache吧!Nginx的产生Nginx同Apache一样都是一种Web服务器,基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locat...
-
1
终于有人把碳中和说清楚了 Vision • 2021-12-13 12:39:56 来源:前瞻网 E2051G0...
-
11
Python爬虫编程思想(135):多线程和多进程爬虫--Python与线程 ...
-
8
Python爬虫编程思想(134):多线程和多进程爬虫--线程与进程详解
-
2
Python爬虫编程思想(136):多线程和多进程爬虫--Thread类与线程函数 ...
-
3
UI设计中常见的控件设计都有哪些规范?本文总结了按钮、多选、单选、...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK