>å 为å人å¿
æ
å½èªå·±çæ
åãå¨éçä¸åæçï¼å½æä¸åéç¨çä¾ç»æ½æç人ãä¸è¦èªæ¬ºï¼ç¥æ¯è½»æ
¢ä¸å¾çã人ç§çæ¯ä»ä¹ï¼æ¶ç乿¯ä»ä¹ã顺çæ
欲æç§çï¼å¿
仿
欲æ¶è´¥åï¼é¡ºçå£çµæç§çï¼å¿
ä»å£çµæ¶æ°¸çãæä»¬è¡åï¼ä¸å¯ä¸§å¿ï¼è¥ä¸ç°å¿ï¼å°äºæ¶åå°±è¦æ¶æã(GALATIANS 6:5-9)
#é误åå¼å¸¸(1)
è½ç¶å¨åé¢çå¦ä¹ ä¸ï¼å·²ç»éå°äºé误åå¼å¸¸é®é¢ï¼ä½æ¯ä¸ç´æ²¡æå¾è®¤ççç ç©¶å®ãç°å¨æ¥è¿è·ç¦»è§å¯é误åå¼å¸¸ã
##é误
pythonä¸çé误ä¹ä¸æ¯è¯æ³é误(syntax errors)ï¼æ¯å¦ï¼
>>> for i in range(10)
File "", line 1
for i in range(10)
^
SyntaxError: invalid syntax
ä¸é¢é£å¥è¯å 为缺å°åå·`:`ï¼å¯¼è´è§£é卿 æ³è§£éï¼äºæ¯æ¥éãè¿ä¸ªæ¥éè¡ä¸ºæ¯ç±pythonçè¯æ³åæå¨å®æçï¼å¹¶ä¸æ£æµå°äºé误æå¨æä»¶åè¡å·ï¼`File "", line 1`ï¼ï¼è¿ä»¥åä¸ç®å¤´`^`æ è¯é误ä½ç½®ï¼åé¢ç¼ºå°`:`ï¼ï¼æåæ¾ç¤ºé误类åã
é误ä¹äºæ¯å¨æ²¡æè¯æ³é误ä¹åï¼ä¼åºç°é»è¾é误ãé»è¾é误å¯è½ä¼ç±äºä¸å®æ´æè
ä¸åæ³çè¾å
¥å¯¼è´ï¼ä¹å¯è½æ¯æ æ³çæã计ç®çï¼æè
æ¯å
¶å®é»è¾é®é¢ã
å½pythonæ£æµå°ä¸ä¸ªé误æ¶ï¼è§£éå¨å°±æ æ³ç»§ç»æ§è¡ä¸å»ï¼äºæ¯æåºå¼å¸¸ã
##å¼å¸¸
çä¸ä¸ªå¼å¸¸ï¼è®©0å忝äºï¼è¿æ¯å°å¦çé½ç¸ä¿¡ä¼æå¼å¸¸çï¼ï¼
>>> 1/0
Traceback (most recent call last):
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
å½pythonæåºå¼å¸¸çæ¶åï¼é¦å
æâè·è¸ªè®°å½(Traceback)âï¼è¿å¯ä»¥ç»å®åä¸ä¸ªæ´ä¼é
çååâåæº¯âãå颿¾ç¤ºå¼å¸¸ç详ç»ä¿¡æ¯ãå¼å¸¸æå¨ä½ç½®ï¼æä»¶ãè¡ãå¨æä¸ªæ¨¡åï¼ã
æåä¸è¡æ¯é误类å以å导è´å¼å¸¸çåå ã
ä¸è¡¨ä¸ååºå¸¸è§çå¼å¸¸
|å¼å¸¸ | æè¿°|
|-----|-----|
|NameError |å°è¯è®¿é®ä¸ä¸ªæ²¡æç³æçåé|
|ZeroDivisionError | 餿°ä¸º0|
|SyntaxError| è¯æ³é误|
|IndexError| ç´¢å¼è¶
åºåºåèå´|
|KeyError| 请æ±ä¸ä¸ªä¸åå¨çåå
¸å
³é®å|
|IOError| è¾å
¥è¾åºéè¯¯ï¼æ¯å¦ä½ è¦è¯»çæä»¶ä¸åå¨ï¼|
|AttributeError| å°è¯è®¿é®æªç¥çå¯¹è±¡å±æ§|
为äºè½å¤æ·±å
¥çè§£ï¼ä¾æ¬¡ä¸¾ä¾ï¼å±ç¤ºå¼å¸¸çåºç°æ¡ä»¶åç»æã
###NameError
>>> bar
Traceback (most recent call last):
File "", line 1, in
NameError: name 'bar' is not defined
pythonä¸åééè¦åå§åï¼å³è¦èµå¼ãè½ç¶ä¸éè¦åæäºè¯è¨é£æ ·å£°æï¼ä½æ¯è¦èµå¼å
ãå 为åéç¸å½äºä¸ä¸ªæ ç¾ï¼è¦æå®è´´å°å¯¹è±¡ä¸æææä¹ã
###ZeroDivisionError
>>> 1/0
Traceback (most recent call last):
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
è²ä¼¼è¿æ ·ç®åçé误æ¶ä¸ä¼åºç°çï¼ä½å¨å®é
æ
å¢ä¸ï¼å¯è½æ²¡æè¿ä¹å®¹æè¯å«ï¼æä»¥ï¼ä¾ç¶è¦å°å¿ä¸ºå¦ã
###SyntaxError
>>> for i in range(10)
File "", line 1
for i in range(10)
^
SyntaxError: invalid syntax
è¿ç§é误åçå¨python代ç ç¼è¯çæ¶åï¼å½ç¼è¯å°è¿ä¸å¥æ¶ï¼è§£éå¨ä¸è½è®²ä»£ç 转å为pythonåèç ï¼å°±æ¥éãåªææ¹æ£æè½ç»§ç»ãæä»¥ï¼å®æ¯å¨ç¨åºè¿è¡ä¹åå°±ä¼åºç°çï¼å¦ææéï¼ãç°å¨æä¸å°ç¼è¾å¨é½æè¯æ³æ ¡éªåè½ï¼å¨ä½ å代ç çæ¶åå°±è½æ¾ç¤ºåºè¯æ³çæ£è¯¯ï¼è¿å¤å°ä¼å¯¹ç¼ç¨è
æå¸®å©ã
###IndexError
>>> a = [1,2,3]
>>> a[4]
Traceback (most recent call last):
File "", line 1, in
IndexError: list index out of range
>>> d = {"python":"itdiffer.com"}
>>> d["java"]
Traceback (most recent call last):
File "", line 1, in
KeyError: 'java'
è¿ä¸¤ä¸ªé½å±äºâ鸡èéé¢æéª¨å¤´âç±»åï¼ä¸å®å¾æ¥éäºãä¸è¿å¨ç¼ç¨å®è·µä¸ï¼ç¹å«æ¯å¾ªç¯çæ¶åï¼å¸¸å¸¸ç±äºå¾ªç¯æ¡ä»¶è®¾ç½®ä¸åçåºç°è¿ç§ç±»åçé误ã
###IOError
>>> f = open("foo")
Traceback (most recent call last):
File "", line 1, in
IOError: [Errno 2] No such file or directory: 'foo'
å¦æä½ ç¡®è®¤ææä»¶ï¼å°±ä¸å®è¦æè·¯å¾åæ£ç¡®ï¼å ä¸ºä½ å¹¶æ²¡æåè¯pythonå¯¹ä½ çcomputerè¿è¡å
¨èº«æç´¢ï¼æä»¥ï¼python伿ç
§ä½ æå®ä½ç½®å»æ¾ï¼æ¾ä¸å°å°±å¼å¸¸ã
###AttributeError
>>> class A(object): pass
...
>>> a = A()
>>> a.foo
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'A' object has no attribute 'foo'
屿§ä¸åå¨ãè¿ç§é误åé¢å¤æ¬¡è§å°ã
å
¶å®ï¼pythonå
建çå¼å¸¸ä¹ä¸ä»
ä»
ä¸é¢å 个ï¼ä¸é¢åªæ¯ååºå¸¸è§çå¼å¸¸ä¸çå ä¸ªãæ¯å¦è¿æï¼
>>> range("aaa")
Traceback (most recent call last):
File "", line 1, in
TypeError: range() integer end argument expected, got str.
æ»ä¹ï¼å¦æè¯»è
å¨è°è¯ç¨åºçæ¶åéå°äºå¼å¸¸ï¼ä¸è¦æ
å¼ ï¼è¿æ¯å¥½äºæ
ï¼æ¯pythonå¨å¸®å©ä½ ä¿®æ¹é误ãåªè¦è®¤çé
读å¼å¸¸ä¿¡æ¯ï¼åç¨`dir()`ï¼`help()`æè
宿¹ç½ç«ææ¡£ãgoogleçæ¥åå©ï¼ä¸å®è½è§£å³é®é¢ã
##å¤çå¼å¸¸
å¨ä¸æ®µç¨åºä¸ï¼ä¸ºäºè½å¤è®©ç¨åºå¥å£®ï¼å¿
é¡»è¦å¤çå¼å¸¸ã举ä¾ï¼
#!/usr/bin/env python
# coding=utf-8
while 1:
print "this is a division program."
c = raw_input("input 'c' continue, otherwise logout:")
if c == 'c':
a = raw_input("first number:")
b = raw_input("second number:")
try:
print float(a)/float(b)
print "*************************"
except ZeroDivisionError:
print "The second number can't be zero!"
print "*************************"
else:
break
è¿è¡è¿æ®µç¨åºï¼æ¾ç¤ºå¦ä¸è¿ç¨ï¼
$ python 21601.py
this is a division program.
input 'c' continue, otherwise logout:c
first number:5
second number:2
2.5
*************************
this is a division program.
input 'c' continue, otherwise logout:c
first number:5
second number:0
The second number can't be zero!
*************************
this is a division program.
input 'c' continue, otherwise logout:d
$
ä»è¿è¡æ
åµçï¼å½å¨ç¬¬äºä¸ªæ°ï¼å³é¤æ°ä¸º0æ¶ï¼ç¨åºå¹¶æ²¡æå 为è¿ä¸ªé误è忢ï¼èæ¯ç»ç¨æ·ä¸ä¸ªå好çæç¤ºï¼è®©ç¨æ·ææºä¼æ¹æ£é误ãè¿å®å
¨å¾çäºç¨åºä¸âå¤çå¼å¸¸âç设置ï¼å¦ææ²¡æâå¤çå¼å¸¸âï¼å¼å¸¸åºç°ï¼å°±ä¼å¯¼è´ç¨åºç»æ¢ã
å¤çå¼å¸¸çæ¹å¼ä¹ä¸ï¼ä½¿ç¨`try...except...`ã
对äºä¸è¿°ç¨åºï¼åªçtryåexcepté¨åï¼å¦ææ²¡æå¼å¸¸åçï¼exceptåå¥å¨tryè¯å¥æ§è¡ä¹å被忽ç¥ï¼å¦ætryåå¥ä¸æå¼å¸¸å¯ï¼è¯¥é¨åçå
¶å®è¯å¥è¢«å¿½ç¥ï¼ç´æ¥è·³å°excepté¨åï¼æ§è¡å
¶å颿å®çå¼å¸¸ç±»ååå
¶åå¥ã
exceptåé¢ä¹å¯ä»¥æ²¡æä»»ä½å¼å¸¸ç±»åï¼å³æ å¼å¸¸åæ°ãå¦æè¿æ ·ï¼ä¸è®ºtryé¨ååçä»ä¹å¼å¸¸ï¼é½ä¼æ§è¡exceptã
å¨exceptåå¥ä¸ï¼å¯ä»¥æ ¹æ®å¼å¸¸æè
å«çéè¦ï¼è¿è¡æ´å¤çæä½ãæ¯å¦ï¼
#!/usr/bin/env python
# coding=utf-8
class Calculator(object):
is_raise = False
def calc(self, express):
try:
return eval(express)
except ZeroDivisionError:
if self.is_raise:
print "zero can not be division."
else:
raise
å¨è¿éï¼åºç¨äºä¸ä¸ªå½æ°`eval()`ï¼å®çå«ä¹æ¯ï¼
eval(...)
eval(source[, globals[, locals]]) -> value
Evaluate the source in the context of globals and locals.
The source may be a string representing a Python expression
or a code object as returned by compile().
The globals must be a dictionary and locals can be any mapping,
defaulting to the current globals and locals.
If only globals is given, locals defaults to it.
ä¾å¦ï¼
>>> eval("3+5")
8
å¦å¤ï¼å¨exceptåå¥ä¸ï¼æä¸ä¸ª`raise`ï¼ä½ä¸ºåç¬ä¸ä¸ªè¯å¥ãå®çå«ä¹æ¯å°å¼å¸¸ä¿¡æ¯æåºãå¹¶ä¸ï¼exceptåå¥ç¨äºä¸ä¸ªå¤æè¯å¥ï¼æ ¹æ®ä¸åçæ
åµç¡®å®èµ°ä¸å忝ã
if __name__ == "__main__":
c = Calculator()
print c.calc("8/0")
è¿æ¶å`is_raise = False`ï¼åä¼ï¼
$ python 21602.py
Traceback (most recent call last):
File "21602.py", line 17, in
print c.calc("8/0")
File "21602.py", line 8, in calc
return eval(express)
File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
妿å°`is_raise`ç弿¹ä¸ºTrueï¼å°±æ¯è¿æ ·äºï¼
if __name__ == "__main__":
c = Calculator()
c.is_raise = True #éè¿å®ä¾å±æ§ä¿®æ¹
print c.calc("8/0")
è¿è¡ç»æï¼
$ python 21602.py
zero can not be division.
None
æåçNoneæ¯`c.calc("8/0")`çè¿åå¼ï¼å 为æ`print c.calc("8/0")`ï¼æä»¥è¢«æå°åºæ¥ã
------
[æ»ç®å½](./index.md) | [ä¸èï¼çæå¨](./215.md) | [ä¸èï¼é误åå¼å¸¸(2)](./217.md)
å¦æä½ è®¤ä¸ºæå¿
è¦æèµæï¼è¯·éè¿æ¯ä»å®ï¼**[email protected]**,ä¸èææ¿ã