PHP[转]二十二个新手常见Python运营时不当

原址:http://www.oschina.net/question/89964_62779?p=1

 

那阵子学 Python 时,想要弄懂 Python
的错误消息的意义大概有点复杂。那里列出了广阔的的一部分让您程序 crash
的运作时不当。

1)忘记在 if , elif , else , for , while , class ,def 证明末尾添加
:(导致 “SyntaxError :invalid syntax”)

该错误将爆发在相近如下代码中:

?12 if spam == 42    print(‘Hello!’)
2)使用 = 而不是 ==(导致“SyntaxError: invalid syntax”)

 = 是赋值操作符而 == 是相等相比操作。该错误发生在如下代码中:

?12 if spam = 42:     print(‘Hello!’)
3)错误的行使缩进量。(导致“IndentationError:unexpected
indent”、“IndentationError:unindent does not match any outer indetation
level”以及“IndentationError:expected an indented block”)

切记缩进增添只用在以:结束的语句之后,而自此必须恢复生机到以前的缩进格式。该错误发生在如下代码中:

?12345678910111213 print(‘Hello!’)     print(‘Howdy!’)   或者:  if spam
== 42:     print(‘Hello!’)   print(‘Howdy!’)   或者:  if spam == 42:
print(‘Hello!’)
4)在 for 循环语句中忘记调用 len() (导致“TypeError: ‘list’ object cannot
be interpreted as an integer”)

普通你想要通过索引来迭代一个list大概string的要素,那亟需调用 range()
函数。要记得重临len 值而不是回到这一个列表。

该错误发生在如下代码中:

?123 spam = [‘cat’, ‘dog’, ‘mouse’] for i in range(spam):    
print(spam[i])
5)尝试修改string的值(导致“TypeError: ‘str’ object does not support
item assignment”)

string是一种不可变的数据类型,该错误发生在如下代码中:

?123 spam = ‘I have a pet cat.’spam[13] = ‘r’ print(spam)
而你其实想要那样做:

?123 spam = ‘I have a pet cat.’spam = spam[:13] + ‘r’ + spam[14:]
print(spam)
6)尝试连接非字符串值与字符串(导致 “TypeError: Can’t convert ‘int’
object to str implicitly”)

该错误产生在如下代码中:

?12 numEggs = 12 print(‘I have ‘ + numEggs + ‘ eggs.’)

而你实在想要那样做:

?1234567 numEggs = 12 print(‘I have ‘ + str(numEggs) + ‘ eggs.’)  
或者:   numEggs = 12 print(‘I have %s eggs.’ % (numEggs))
7)在字符串首尾忘记加引号(导致“SyntaxError: EOL while scanning string
literal”)

该错误发生在如下代码中:

?12345678910 print(Hello!’)   或者:  print(‘Hello!)   或者:   myName =
‘Al’ print(‘My name is ‘ + myName + . How are you?’)
8)变量大概函数名拼写错误(导致“NameError: name ‘fooba’ is not
defined”)

该错误发生在如下代码中:

?12345678910 foobar = ‘Al’ print(‘My name is ‘ + fooba)   或者:   spam =
ruond(4.2)   或者:   spam = Round(4.2)
9)方法名拼写错误(导致 “AttributeError: ‘str’ object has no attribute
‘lowerr’”)

该错误产生在如下代码中:

?12 spam = ‘THIS IS IN LOWERCASE.’spam = spam.lowerr()
10)引用当先list最大索引(导致“IndexError: list index out of range”)

该错误产生在如下代码中:

?12 spam = [‘cat’, ‘dog’, ‘mouse’] print(spam[6])
11)使用不设有的字典键值(导致“KeyError:‘spam’”)

该错误爆发在如下代码中:

?12 spam = {‘cat’: ‘Zophie’, ‘dog’: ‘Basil’, ‘mouse’: ‘Whiskers’}
print(‘The name of my pet zebra is ‘ + spam[‘zebra’])
12)尝试运用Python关键字作为变量名(导致“SyntaxError:invalid syntax”)

Python关键无法用作变量名,该错误发生在如下代码中:

?1 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供给钦命三个灵光的开始值。

该错误发生在如下代码中:

?123 spam = 0spam += 42eggs += 42
14)在概念局地变量前在函数中利用一些变量(此时有与部分变量同名的全局变量存在)(导致“UnboundLocalError:
local variable ‘foobar’ referenced before assignment”)

在函数中应用一些变来那么些而同时又存在同名全局变量时是很复杂的,使用规则是:借使在函数中定义了任何事物,假使它只是在函数中行使那它正是有个别的,反之便是全局变量。

那意味你无法在概念它从前把它当全局变量在函数中接纳。

该错误产生在如下代码中:

?12345 someVar = 42 def myFunction():     print(someVar)     someVar =
100myFunction()
15)尝试运用 range()创造整数列表(导致“TypeError: ‘range’ object does
not support item assignment”)

偶然你想要得到一个不变的平头列表,所以 range()
看上去是生成此列表的正确办法。然则,你须要牢记 range() 重返的是 “range
object”,而不是实际上的 list 值。

该错误产生在如下代码中:

?12 spam = range(10) spam[4] = -1
或许那才是你想做:

?12 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中是从未如此的操作符的。

该错误产生在如下代码中:

?12 spam = 1spam++
或然那才是你想做的:

?12 spam = 1spam += 1
17)忘记为格局的第四个参数添加self参数(导致“TypeError: myMethod() takes
no arguments (1 given)”)

该错误发生在如下代码中:

?12345 class Foo():     def myMethod():         print(‘Hello!’) a =
Foo() a.myMethod()

 

相关文章