python常見報錯
NameError: 嘗試訪問一個未申明的變數
>>> foo
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
foo
NameError: name 'foo' is not defined
ZeroDivisionError: 除數為零
>>> 1/0
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
1/0
ZeroDivisionError: integer division or modulo by zero
SyntaxError: Python 直譯器語法錯誤
>>> for
SyntaxError: invalid syntax
IndexError:請求的索引超出序列範圍
>>> aList = []
>>> aList[0]
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
aList[0]
IndexError: list index out of range
KeyError: 請求一個不存在的字典關鍵字
>>> aDict={'host':'earth','port':80}
>>> print aDict['server']
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print aDict['server']
KeyError: 'server'
IOError: 輸入/輸出錯誤
>>> f=open("blah")
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
f=open("blah")
IOError: [Errno 2] No such file or directory: 'blah'
AttributeError: 嘗試訪問未知的物件屬性
>>> class myClass(object):
pass
>>> myInst = myClass()
>>> myInst.bar = 'spam'
>>> myInst.bar
'spam'
>>> myInst.foo
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
myInst.foo
AttributeError: 'myClass' object has no attribute 'foo'
在我們的例子中, 我們在 myInst.bar 儲存了一個值, 也就是例項 myInst 的 bar 屬性. 屬性被定義後, 我們可以使用熟悉的點/屬性操作符訪問它, 但如果是沒有定義屬性, 例如我們訪問foo 屬性, 將導致一個 AttributeError 異常.
示例1:
#!/usr/bin/env python
def safe_float(obj):
try:
retval=float(obj)
except (ValueError,TypeError),diag:
retval=str(diag)
return retval
print safe_float('12.34')
print safe_float('bad input')
print safe_float({'a':'Dict'})
執行結果:
>>>
12.34
invalid literal for float(): bad input
float() argument must be a string or a number
>>>
示例2:
c:\carddata.txt 檔案內容如下
# carddata.txt previous balance
25
debits
21.64
541.24
25
credits
-25
-541.24
finance charge/late fees
7.30
5
程式碼:
#!/usr/bin/env python
def safe_float(obj):
'safe version of float()'
try:
retval=float(obj)
except (ValueError,TypeError),diag:
retval=str(diag)
return retval
def main():
'handles all the data processing'
log=open(r'c:\cardlog.txt','w')
try:
ccfile=open(r'c:\carddata.txt','r')
except IOError,e:
log.write('no txns this month\n')
log.close()
return
txns=ccfile.readlines()
ccfile.close()
total=0.00
log.write('account log:\n')
for eachTxn in txns:
result=safe_float(eachTxn)
if isinstance(result,float):
total += result
log.write('[%s]: data... processed\n' %eachTxn.strip())
else:
log.write('ignored: [%s] \n' % result.strip())
print '$%.2f (new balance)' % (total)
log.close()
if __name__=='__main__':
main()
執行結果如下:
>>> ================================ RESTART ================================
>>>
$58.94 (new balance)
>>>
cardlog.txt 檔案記錄內容:
account log:
ignored: [invalid literal for float(): # carddata.txt previous balance]
[25]: data... processed
ignored: [invalid literal for float(): debits]
[21.64]: data... processed
[541.24]: data... processed
[25]: data... processed
ignored: [invalid literal for float(): credits]
[-25]: data... processed
[-541.24]: data... processed
ignored: [invalid literal for float(): finance charge/late fees]
[7.30]: data... processed
[5]: data... processed
轉自:http://blog.sina.com.cn/s/blog_6238358c0100gzr5.html