无法在Brython中导入操作系统 - TypeError

时间:2015-08-11 08:47:30

标签: python brython

我正在尝试在Brython中导入os模块,但无论我做什么,无论我尝试什么,我都无法做到。 我收到以下错误(在Firefox控制台中):

"TypeError: obj is undefined for module os" brython.js:6329:21
"message: undefined" brython.js:6330:1
"filename: http://localhost:8000/src/brython.js" brython.js:6331:1
"linenum: 4418" brython.js:6332:1
"Javascript error" TypeError: obj is undefined
Stack-Trace:
$B.get_class@http://localhost:8000/src/brython.js:4418:5
$test@http://localhost:8000/src/brython.js:8873:1
$SetDict.__le__@http://localhost:8000/src/brython.js:8830:50
getattr/method@http://localhost:8000/src/brython.js:5039:8
$module<@http://localhost:8000/src/brython.js line 6329 > eval:966:41
@http://localhost:8000/src/brython.js line 6329 > eval:1:14
run_py@http://localhost:8000/src/brython.js:6329:1
import_py@http://localhost:8000/src/brython.js:6310:8
import_from_stdlib_static@http://localhost:8000/src/brython.js:6378:22
$B.$import@http://localhost:8000/src/brython.js:6454:57
@http://localhost:8000/src/brython.js line 3931 > eval:11:1
brython@http://localhost:8000/src/brython.js:3931:7
onload@http://localhost:8000/boolean/boolean.html:1:1
 brython.js:3940:43
"Traceback (most recent call last):
RuntimeError: TypeError: obj is undefined"

当我这样做时:

import os

def foo(ev):
    print(os.getcwd())

doc["submit"].bind('click', foo)

这只是一个例子 - 原来代码要长得多。 我使用的是最新的Brython版本(3.2.0)。 当我在他们提供的控制台中的Brython页面上尝试它们时,os和函数的导入工作正常,到目前为止,os是我无法工作的唯一导入。 感谢您的帮助,谢谢您的时间

更新: 它现在有效,但我不知道为什么,我不明白 - 如果有人能解释我做错了什么会很好,如果我将来遇到类似的问题 我四处寻找os的替代品(我想从目录中读取.txt文件 - 我知道如何使用os在“vanilla”Python中执行此操作)并找到了一个使用glob的解决方案,我试图导入。 Brython似乎没有带有glob,所以我将glob.py放在lib文件夹中 - 但是我也看到glob导入了os,所以我想知道它是否有效,它做了什么。 然后我再次尝试导入操作系统,现在它可以工作,我不知道为什么。

from browser import document as doc, alert, html
from glob import glob
import os

# ... # 

def foo(ev):
    print(os.getcwd())

doc["submit"].bind("click", foo)

现在有效。我不明白,为什么我导入glob然后是os?

1 个答案:

答案 0 :(得分:0)

在您的代码示例中,doc未定义:

import os

def foo(ev):
    print(os.getcwd())

doc["submit"].bind('click', foo)

我可以import os没有问题。

我想你的完整代码不是这样的。请提供完整的样本以查看是否存在其他问题,我将编辑我的答案。

P.D。:我无法发表评论,因为我没有足够的声誉,这就是我发布答案的原因......