我正在制作一个小型Python模块.我想要这个模块返回错误,如果有的话.在Python中创建错误对象的正确或标准方法是什么?
编辑:我不确定如何创建自己的错误,当然因为我不确定错误是如何工作的(我只知道如何捕获它们try: ... except: ...).所以现在我做了草稿错误消息,错误是字符串.当出现意外情况时,我会打印和return None.我猜这不是正确的方法:)
例:
...
self.IsNotStringError = "Args was not a string."
...
def myMethod(self, args)
""" Args must be a string. """
if not isinstance(args, str):
print IsNotStringError
return None
else:
do things...
Run Code Online (Sandbox Code Playgroud)
编辑(之二):在阅读下面的答案后,我进一步研究了Python文档.有一个关于如何制作用户定义的异常的教程.
文档中的示例:
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
Run Code Online (Sandbox Code Playgroud) 如果变量名称在函数内有赋值给它们,并且我想从函数中访问模块变量,那么我可以在模块中导入模块名称然后用它来访问模块变量吗?
示例(文件名:server.py):
import server
bar = 5
def foo():
server.bar = 10
Run Code Online (Sandbox Code Playgroud) 在我正在处理的代码库中,默认的python json模块被另一个json执行不同功能的模块覆盖.
如何导入标准json模块?
import json 不起作用,因为它导入其他包.
什么是标准python json模块的完全限定名称?
假设我们有一段错误的代码,意外地覆盖了某些系统库的属性,如下所示:
import socket
socket.error = 'some other object'
Run Code Online (Sandbox Code Playgroud)
有没有办法防止这种行为,或找到负责这样做的代码?
我尝试用socket.error创建一个属性,但这不起作用:
def fget(self):
return socket.error
def fset(self, value):
raise SystemError('You cannot alter this attribute.')
# From now on, settings socket.error = x should raise an error
socket.error = property(fget, fset)
Run Code Online (Sandbox Code Playgroud) 在Aptana中配置PyDev的Forced Builtins时,我注意到默认情况下使用_(下划线)前缀引用了一些模块.
所以我打开一个Python解释器,令我惊讶的是,下面的导入工作:
import ast
import _ast
import bisect
import _bisect
import csv
import _csv
# ... and so on
Run Code Online (Sandbox Code Playgroud)
现在,如果我dir()对导入的模块执行操作,我会看到不同的内容:
>>> dir(csv)
['Dialect', 'DictReader', 'DictWriter', 'Error', ...] # and so on
>>> dir(_csv)
['Dialect', 'Error', ...] # node that DictReader and DictWriter are missing
Run Code Online (Sandbox Code Playgroud)
最后,help()告诉我他们显然是不同的模块:
>>> help(_csv)
Help on module _csv:
NAME
_csv - CSV parsing and writing.
FILE
/usr/lib64/python2.6/lib-dynload/_csv.so
...
>>> help(csv)
Help on module csv:
NAME
csv - CSV parsing and …Run Code Online (Sandbox Code Playgroud) 我想要一个包含名为'foobar'的代码的Python文件,该代码在安装软件包时作为脚本执行,如下所示:
$ foobar -i arg1 arg2
Run Code Online (Sandbox Code Playgroud)
foobar被声明为脚本setup.py.
该foobar文件还包含由包中的其他模块导入的函数/类,因此有一个单独的文件quux.py导入foobar:
(in `quux.py`):
import mypackage
import mypackage.foobar as foobar
Run Code Online (Sandbox Code Playgroud)
如何在foobar没有.py扩展名的情况下保留并将其声明为脚本,setup.py但仍然可以将其作为模块从另一个文件中导入?这是正确的答案:导入没有.py扩展名的python模块, - 还是有另一种技巧?
我最近开始使用python,我现在正在寻找一个显示我的Twitter提要的应用程序.所以我下载了一个名为Python-Twitter的模块(不确定是否称之为)并安装了它.但是现在我每次尝试导入它时都会遇到这个错误:
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import twitter
File "build\bdist.win32\egg\twitter.py", line 38, in <module>
File "C:\Python27\lib\site-packages\requests_oauthlib-0.4.0-py2.7.egg\requests_oauthlib\__init__.py", line 1, in <module>
from .oauth1_auth import OAuth1
File "C:\Python27\lib\site-packages\requests_oauthlib-0.4.0-py2.7.egg\requests_oauthlib\oauth1_auth.py", line 4, in <module>
from requests.utils import to_native_string
ImportError: cannot import name to_native_string
Run Code Online (Sandbox Code Playgroud)
有谁知道我可能做错了安装或什么?谢谢
当我运行一个程序包含: -
来自pythonds.basic.stack导入Stack
它说: - ImportError:没有名为pythonds.basic.stack的模块
请帮帮我.
我正在开发一个Python应用程序,它构建了一些我用pip安装的软件包,例如Flask,requests,PIL.
那么如何分发我的程序以便其他人可以轻松地安装每个必需的依赖项/包并简单地使它在每台计算机上运行?是setup.py我在寻找什么或根本没有?如果是这样,你能否解释它的作用并提供一个示例setup.py来做我正在尝试做的事情?
PS:我也有这个小问题:我需要在程序的顶级文件夹中提供__init__.py,还是只在子目录中?
我创建了一个名为code:code.py的模块并编写了一个简单的函数:
def main():
print("simple function")
Run Code Online (Sandbox Code Playgroud)
我尝试在site-packages中删除此文件,当我运行时:
import code
code.main()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:AttributeError:模块'code'没有属性'main'.
有趣的是,如果我将模块重命名为foo.py,这段代码就可以了:
import foo
foo.main()
Run Code Online (Sandbox Code Playgroud)
代码不是保留字,为什么我不能命名模块代码?
python ×10
python-module ×10
pip ×2
deployment ×1
json ×1
python-3.x ×1
scope ×1
setuptools ×1
stack ×1
twitter ×1