開個貼,用于記錄平時經常碰到的Python的錯誤同時對導致錯誤的原因進行分析,并持續更新,方便以后查詢,學習。
知識在于積累嘛!微笑
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
錯誤:
 代碼如下:
>>> def f(x, y):  
    print x, y  
>>> t = ('a', 'b')  
>>> f(t)  
  
Traceback (most recent call last):  
  File "<pyshell#65>", line 1, in <module>  
    f(t)  
TypeError: f() takes exactly 2 arguments (1 given)  
【錯誤分析】不要誤以為元祖里有兩個參數,將元祖傳進去就可以了,實際上元祖作為一個整體只是一個參數,
實際需要兩個參數,所以報錯。必需再傳一個參數方可.
 代碼如下:
>>> f(t, 'var2')  
('a', 'b') var2  
更常用的用法: 在前面加*,代表引用元祖
 代碼如下:
>>> f(*t)  
'a', 'b'  
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
錯誤:
 代碼如下:
>>> def func(y=2, x):  
    return x + y  
SyntaxError: non-default argument follows default argument  
【錯誤分析】在C++,Python中默認參數從左往右防止,而不是相反。這可能跟參數進棧順序有關。
 代碼如下:
>>> def func(x, y=2):  
    return x + y  
>>> func(1)  
3  
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
錯誤:
 代碼如下:
>>> D1 = {'x':1, 'y':2}  
>>> D1['x']  
1  
>>> D1['z']  
  
Traceback (most recent call last):  
  File "<pyshell#185>", line 1, in <module>  
    D1['z']  
KeyError: 'z'  
【錯誤分析】這是Python中字典鍵錯誤的提示,如果想讓程序繼續運行,可以用字典中的get方法,如果鍵存在,則獲取該鍵對應的值,不存在的,返回None,也可打印提示信息.
 代碼如下:
>>> D1.get('z', 'Key Not Exist!')  
'Key Not Exist!'  
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
錯誤:
 代碼如下:
>>> from math import sqrt  
>>> exec "sqrt = 1"  
>>> sqrt(4)  
  
Traceback (most recent call last):  
  File "<pyshell#22>", line 1, in <module>  
    sqrt(4)  
TypeError: 'int' object is not callable  
【錯誤分析】exec語句最有用的地方在于動態地創建代碼字符串,但里面存在的潛在的風險,它會執行其他地方的字符串,在CGI中更是如此!比如例子中的sqrt = 1,從而改變了當前的命名空間,從math模塊中導入的sqrt不再和函數名綁定而是成為了一個整數。要避免這種情況,可以通過增加in <scope>,其中<scope>就是起到放置代碼字符串命名空間的字典。            
新聞熱點
疑難解答