小编Alb*_*rly的帖子

导入模块和NameError的问题:未定义全局名称"模块"

对不起,如果之前已经问过这个问题.我环顾了一会儿,我还没有找到解决方案.

所以我在ResourceOpen.py文件中创建了一个类

class ResourceOpen():

    import urllib.request

    def __init__(self, source):
            try:
                # Try to open URL
                page = urllib.request.urlopen(source)
                self.text = page.read().decode("utf8")
            except ValueError:
                # Fail? Print error.
                print ("Woops!  Can't find the URL.")
                self.text = ''

    def getText(self):
        return self.text
Run Code Online (Sandbox Code Playgroud)

我想在另一个程序中使用这个类,youTubeCommentReader.py ...

import ResourceOpen
import urllib.request

pageToOpen = "http://www.youtube.com"
resource = ResourceOpen.ResourceOpen(pageToOpen)
text = resource.getText()
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行youTubeCommentReader时,我都会收到错误消息:

Traceback               
    <module>    D:\myPythonProgs\youTubeCommentReader.py
    __init__    D:\myPythonProgs\ResourceOpen.py
NameError: global name 'urllib' is not defined
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?此外,我应该注意,当我访问同一文件中的类时,ResourceOpen.py工作正常.

python namespaces module

3
推荐指数
1
解决办法
7673
查看次数

如何打开 Windows 命令提示符到 VIM 中活动文件的当前目录?

所以我在 vim 中打开了一个文件,我想打开命令提示符到文件的当前目录。这是我尝试过的...

:!start cmd /k
Run Code Online (Sandbox Code Playgroud)

即使我在 vim 中将 :cd 设置为不同的目录,这也会将命令提示符打开到 C:\ 目录。

:!start cmd /k "cd c:\%"
Run Code Online (Sandbox Code Playgroud)

这会失败,因为 % 被转义了。

:!start cmd /k "set vimcwd=%; cd C:\\%vimcwd\%"
Run Code Online (Sandbox Code Playgroud)

我不确定为什么这行不通,但无论如何,这超出了我想要输入的范围。必须有一种更简单的方法来做到这一点。

windows vim cmd command-prompt

3
推荐指数
1
解决办法
1212
查看次数

(Purescript)如何在代数数据类型上模式匹配"空类型"

我正在使用PureScript中的以下代数数据类型...

data Extended a = Infinite | Finite a

v1 = Finite 11
v2 = Infinite
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何模式匹配"无限"情况,因为它似乎v2有类型forall t140. Extended t140.我假设t140是编译器自动填充的某种占位符.v1的类型是Extended Int.因此,如果我设置一个Eq实例来比较Extended的值,那么Infinite案例就不匹配......

instance extendedEq :: (Eq a) => Eq (Extended a) where
  eq (Finite a) (Finite b) = eq a b
  eq Infinite Infinite = true
  eq Infinite _ = false
  eq _ Infinite = false
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试运行时,v2 == v2我得到错误...

No type class instance was found for Prelude.Eq (Extended _0)
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为我想它正试图为t140找到一个Eq实例.

所以我的问题是,如何在无限类型上进行模式匹配?

equality pattern-matching algebraic-data-types purescript

3
推荐指数
1
解决办法
351
查看次数

如何使用EXCEPTION效果从PureScript函数返回值?

我刚刚开始学习PureScript效果,并且我试图制作一个具有EXCEPTION效果的函数.

lengthGt5 :: forall eff. String -> Eff (err :: EXCEPTION | eff) String
lengthGt5 a = if (length a <= 5)
              then throwException $ error "Word is not the right length!"
              else a

main = do
  word <- catchException handleShortWord (lengthGt5 "test")
  log word

  where
    handleShortWord err = do
      log (message err)
      return "Defaut::casserole"
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我收到以下错误

无法匹配类型

    String

  with type

    Eff
      ( err :: EXCEPTION
      | eff0
      )
      String
Run Code Online (Sandbox Code Playgroud)

我知道lengthGt5需要在非异常的情况下返回一个包装在Eff中的String,但是我不知道如何在值周围创建一个"空效果包装器" a.我在考虑这个吗?

exception-handling effects purescript

2
推荐指数
1
解决办法
435
查看次数