对不起,如果之前已经问过这个问题.我环顾了一会儿,我还没有找到解决方案.
所以我在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工作正常.
所以我在 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)
我不确定为什么这行不通,但无论如何,这超出了我想要输入的范围。必须有一种更简单的方法来做到这一点。
我正在使用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实例.
所以我的问题是,如何在无限类型上进行模式匹配?
我刚刚开始学习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.我在考虑这个吗?
purescript ×2
cmd ×1
effects ×1
equality ×1
module ×1
namespaces ×1
python ×1
vim ×1
windows ×1