簡體   English   中英

為什么Python會拋出此錯誤?

[英]Why is Python throwing this error?

我定義了一個函數,如下所示:

def test_create_dataframe(df):
    cols=set(df.columns)
    return cols

當我將此函數放入Jupyter筆記本中並調用它時,它將返回應有的結果,即:

{'Name', 'accno', 'idno'}

但是,當我制作一個Python模塊,導入該模塊並通過Jupyter筆記本調用該函數時,出現此錯誤:

      9 def test_create_dataframe(df):
     10         cols=set(df.columns)
---> 11         return cols
     12 
     13 

AttributeError: 'list' object has no attribute 'intersection'

有人可以解釋為什么嗎?

您看到的問題歸因於基礎iPython實現。 如果你:

  1. 將模塊導入主腳本
  2. 運行該主腳本
  3. 對導入到主腳本中的模塊進行更改
  4. 再次運行主腳本

然后,如果您得到回溯,可能會得到一些非常奇怪的結果。 我不太確定錯誤的行和顯示的文本是如何編織在一起的(行號正確,但是顯示的這些行號的代碼與實際模塊不匹配)。 肯定的解決方法是在修改導入的模塊后重新啟動基礎iPython內核,但這並不總是可行的。 您可以在這里找到更多詳細信息

該帖子中的修復程序:

有幾種方法可以解決此問題。

1)最簡單,最確定的是在更改導入的模塊后重新啟動ipython內核。 但這也有缺點,尤其是丟失了ipython命名空間和任何其他導入的模塊中存在的數據。

2)對於簡單的情況,可以使用python的reload函數。 (此功能內置於Python 2中。從Python 3.4開始,它是從標准模塊“ importlib”中導入的)。 在許多情況下,編輯模塊后就足夠了。 在有關堆棧溢出的討論中以及其他在線詳細內容中對此進行了簡要描述。

3)對於更復雜的情況,要重新加載已編輯的模塊還需要重新加載其從屬模塊/導入的模塊(例如,因為必須將其初始化為已編輯模塊的初始化的一部分),ipython的autoreload擴展會很有用。 請參見http://ipython.readthedocs.org/en/stable/config/extensions/autoreload.html,其中包括頁面底部的重要說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM