如何将a的str表示形式(dict如下面的字符串)转换为dict?
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
Run Code Online (Sandbox Code Playgroud)
我不喜欢用eval.我还能用什么?
这样做的主要原因是我写的一个同事课程,将所有输入转换为字符串.我没心情去修改他的课程来处理这个问题.
究竟是什么*args和**kwargs意味着什么呢?
根据Python文档,从它看来,它传递了一个参数元组.
def foo(hello, *args):
print hello
for each in args:
print each
if __name__ == '__main__':
foo("LOVE", ["lol", "lololol"])
Run Code Online (Sandbox Code Playgroud)
打印出:
LOVE
['lol', 'lololol']
Run Code Online (Sandbox Code Playgroud)
你如何有效地使用它们?
创建例外的最佳做法是什么?我刚看到这个,我不知道我是否应该感到恐惧或喜欢它.我在书中多次阅读异常永远不会持有字符串,因为字符串本身可以抛出异常.这有什么真相吗?
基本上我从脚本的理解是这样做,所以所有内部Python库将有一个共同的错误消息格式(迫切需要的东西)所以我可以理解为什么把错误消息字符串是一个好主意.(几乎每种方法都会抛出异常,因为完全不需要无效的通过).
有问题的代码如下:
"""
Base Exception, Error
"""
class Error(Exception):
def __init__(self, message):
self.message = message
def __str__(self):
return "[ERROR] %s\n" % str(self.message)
def log(self):
ret = "%s" % str(self.message)
if(hasattr(self, "reason")):
return "".join([ret, "\n==> %s" % str(self.reason)])
return ret
class PCSException(Error):
def __init__(self, message, reason = None):
self.message = message
self.reason = reason
def __str__(self):
ret = "[PCS_ERROR] %s\n" % str(self.message)
if(self.reason != None):
ret += "[REASON] %s\n" % str(self.reason)
return ret
Run Code Online (Sandbox Code Playgroud)
这只是冰山一角,但有人可以给我一些洞察力,这是一个什么使这个可怕的想法?或者,如果有一个更好的异常编码过程/风格.
反正有没有让python列表迭代器倒退?
基本上我有这个
class IterTest(object):
def __init__(self, data):
self.data = data
self.__iter = None
def all(self):
self.__iter = iter(self.data)
for each in self.__iter:
mtd = getattr(self, type(each).__name__)
mtd(each)
def str(self, item):
print item
next = self.__iter.next()
while isinstance(next, int):
print next
next = self.__iter.next()
def int(self, item):
print "Crap i skipped C"
if __name__ == '__main__':
test = IterTest(['a', 1, 2,3,'c', 17])
test.all()
Run Code Online (Sandbox Code Playgroud)
运行此代码会产生输出:
a
1
2
3
Crap i skipped C
Run Code Online (Sandbox Code Playgroud)
我知道为什么它给了我输出,但是有一种方法我可以在str()方法中向后退一步吗?
编辑
好吧也许可以让这个更清楚.我不想做完全反向,基本上我想知道是否有一种简单的方法在python中做相当于双向迭代器?
这可能是一个非常愚蠢的问题,但我在网上看了等等.并没有看到一个可靠的答案.
有没有一种简单的方法来做这样的事情?
lines = open('something.txt', 'r').readlines()
for line in lines:
if line == '!':
# force iteration forward twice
line.next().next()
<etc>
Run Code Online (Sandbox Code Playgroud)
在C++中很容易做到; 只需将迭代器增加一个额外的时间.在Python中有没有一种简单的方法可以做到这一点?
我只想指出,这个问题的主要目的不是"阅读文件等"和跳过事情.我更喜欢C++迭代器样式迭代.新标题也有点愚蠢,我真的不认为它反映了我的问题的本质.
我知道python函数默认是虚拟的.假设我有这个:
class Foo:
def __init__(self, args):
do some stuff
def goo():
print "You can overload me"
def roo():
print "You cannot overload me"
Run Code Online (Sandbox Code Playgroud)
我不希望他们能够做到这一点:
class Aoo(Foo):
def roo():
print "I don't want you to be able to do this"
Run Code Online (Sandbox Code Playgroud)
有没有办法防止用户超载roo()?
我已经有一个项目使用了很多COM和HRESULTS.我想知道是否有可能定义你自己的HRESULT,并且能够将FormatMessage()用于我们自己的HRESULT?
我四处乱窜,无法找到任何东西.有任何想法吗?
编辑
基本上我想定义一组我自己的HRESULT,而不是只返回E_FAIL.或者其他通用的.像E_FAIL一样好.但是,我想说,我想指出,例如地理处理子系统崩溃或文件是无效的光栅图像.该应用程序已经通过它使用com.
我们有一个较旧的C++工具,可以自动生成一些python代码.我今天试图通过C++源码工具,并且非常想拍摄自己.我想做的就是清理工具创建的源代码,并通过添加sphinx标签将类链接到我们的内部文档系统.
现在我想知道是否有一些在python中解析python代码的奇妙工具?
有很多像这样的东西:
foo._methods_.append()
Snip 500 lines
foo._methods_.append()
Run Code Online (Sandbox Code Playgroud)
有什么建议?
基本上我有一个功能但疯狂凌乱的代码结构,我基本上想要提取某些块,将它们移动到自己的文件.并清理所有创造的杂乱的东西.
我在解析器和AST上看了一下quickyl,但我找不到任何使用它的真实例子.
我正在尝试实现名为TimedRotatingFileHandler的python日志记录处理程序.
当它翻到午夜时,它将以当前日期的形式添加:"YYYY-MM-DD".
LOGGING_MSG_FORMAT = '%(name)-14s > [%(levelname)s] [%(asctime)s] : %(message)s'
LOGGING_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
logging.basicConfig(
level=logging.DEBUG,
format=LOGGING_MSG_FORMAT,
datefmt=LOGGING_DATE_FORMAT
)
root_logger = logging.getLogger('')
logger = logging.handlers.TimedRotatingFileHandler("C:\\logs\\Rotate_Test",'midnight',1)
root_logger.addHandler(logger)
while True:
daemon_logger = logging.getLogger('TEST')
daemon_logger.info("SDFKLDSKLFFJKLSDD")
time.sleep(60)
Run Code Online (Sandbox Code Playgroud)
创建的第一个日志文件仅称为"Rotate_Test",然后一旦翻转到第二天,它将文件名更改为:"Rotate_Test.YYYY-MM-DD"其中YYYY-MM-DD是当前日期.
我怎样才能改变它改变文件名的方式?我用Google搜索并查看了API,几乎找不到任何东西.
如何使用ftplib检查远程ftp上的文件是否是文件夹?
我现在最好的方法是做一个nlst,并遍历每个文件的调用大小,如果文件出错那么它是一个文件夹?
有没有更好的办法?我无法解析列表的输出,因为有大约十几个不同的ftp服务器(很多很老.)
我该怎么办?