python 无法识别导入模块中的函数

问题描述 投票:0回答:3

我正在 Jupyter 笔记本中工作。我创建了一个名为 conv.py 的简单模块,用于将英里转换为公里。当我尝试在单独的代码中(在同一目录中)导入此模块时,导入似乎成功,但它无法识别我在“conv”模块中定义的任何函数。

我已经导入了 os 并且 os.getcwd() 为 conv.py 提供了正确的文件夹...

conv.py代码

 in_n_ft = 12
 ft_n_mile = 5280
 m_n_km = 1000
 cm_n_in = 2.54
 cm_n_m = 100
 mm_n_m = 1000
 def ft_to_km(feet):
     return feet*in_n_ft*cm_n_in/cm_n_m/m_n_km
 print(ft_to_km(5280))
 def mil_to_km(mile):
     return mile*ft_n_mile*in_n_ft*cm_n_in/cm_n_m/m_n_km
    
 print(mil_to_km(3.2)) 

新模块代码

 import conv
 km = conv.mil_to_km(5) 

提供错误


AttributeError                            Traceback (most recent call last)
<ipython-input-111-bfd778724ae2> in <module>
      3 import conv
      4 
----> 5 km = conv.mil_to_km(5)
AttributeError: module 'conv' has no attribute 'mil_to_km'

当我打字时

dir(conv)

我明白了

['__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__']

我做错了什么?

编辑

我也尝试过

from conv import mil_to_km

当我这样做时,我得到了一个不同的错误

cannot import name 'mil_to_km' from 'conv' (C:\Users\223023441\Documents\python\conv.py)

我还使用以下方式查询了模块:

from inspect import getmembers, isfunction
import conv

print(getmembers(conv, isfunction))

从这里我得到:

['__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__']

导入后我也无法访问 conv.py 文件中的任何变量...保存 py 文件时我是否做错了什么? Jupyter 将 ipynb 作为通用文件,当我“另存为”到 conv.py 时,这会搞砸吗?

python function module attributes
3个回答
1
投票

所以最终的问题是我保存 .py 文件的方式...我在 jupyter 笔记本中使用“另存为”命令并输入“conv.py”进行文件保存...这显示在目录作为 .py 文件,但我的主文件无法正确识别它。当我将文件下载为 .py 文件后,从我的下载文件夹中剪切并粘贴到我的工作目录中,一切正常...


0
投票

您应该导入

from
模块。 试试这个:

from conv import mil_to_km

km = mil_to_km(5) 

原因是当你以这种方式导入模块时,你正在执行它。 按照我展示的方式,您只需导入所需的功能。


0
投票

我遇到了同样的问题,花了几个小时才解决。对我来说,当我重新启动 Jupyter 内核时,一切正常并且我的功能得到了识别。

© www.soinside.com 2019 - 2024. All rights reserved.