哪个更pythonic?
list.append(1)
Run Code Online (Sandbox Code Playgroud)
要么
list += [1]
Run Code Online (Sandbox Code Playgroud) 我搜索了其他帖子,因为我觉得这是一个相当常见的问题,但我发现的所有其他Python异常问题都没有反映我的问题.
我会尽量在这里具体说明,所以我将举一个直接的例子.并且pleeeeease不会针对此特定问题发布任何变通方法.我对你如何使用xyz发送更好的电子邮件并不感兴趣.我想知道你一般如何处理依赖的,容易出错的语句.
我的问题是,如何很好地处理异常,相互依赖的异常,意思是:只有第一步成功,尝试下一步,依此类推.还有一个标准是:必须捕获所有异常,此代码必须是健壮的.
供您考虑的一个例子:
try:
server = smtplib.SMTP(host) #can throw an exception
except smtplib.socket.gaierror:
#actually it can throw a lot more, this is just an example
pass
else: #only if no exception was thrown we may continue
try:
server.login(username, password)
except SMTPAuthenticationError:
pass # do some stuff here
finally:
#we can only run this when the first try...except was successful
#else this throws an exception itself!
server.quit()
else:
try:
# this is already the 3rd nested try...except
# for such …Run Code Online (Sandbox Code Playgroud) 我发现以下行为至少很奇怪:
def errors():
try:
ErrorErrorError
finally:
return 10
print errors()
# prints: 10
# It should raise: NameError: name 'ErrorErrorError' is not defined
Run Code Online (Sandbox Code Playgroud)
return在finally子句中使用时,异常消失.那是一个错误吗?有记录吗?
但真正的问题(以及我将标记为正确的答案)是:
python开发人员允许这种奇怪行为的理由是什么?
当我运行我的python脚本时,我收到以下警告
DeprecationWarning: the sets module is deprecated
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我写的是这样的:
echo "foo";
echo "\n";
echo "bar";
Run Code Online (Sandbox Code Playgroud)
并且"bar"未写在下面的行中.
我究竟做错了什么?
哈维
我想设置一个类,它将在实例创建期间根据传递给类的参数的值中止.我尝试过一些东西,其中一个是在__new__方法中引发错误:
class a():
def __new__(cls, x):
if x == True:
return cls
else:
raise ValueError
Run Code Online (Sandbox Code Playgroud)
这就是我希望会发生的事情:
>>obj1 = a(True)
>>obj2 = a(False)
ValueError Traceback (most recent call last)
Run Code Online (Sandbox Code Playgroud)
obj1存在但obj2不存在.
有任何想法吗?
我有动态正则表达式,其中我事先不知道它有多少组我想用xml标签替换所有匹配
例
re.sub("(this).*(string)","this is my string",'<markup>\anygroup</markup>')
>> "<markup>this</markup> is my <markup>string</markup>"
Run Code Online (Sandbox Code Playgroud)
是单线还是可能吗?
这是我的装饰者:
def check_domain(func):
def wrapper(domain_id, *args, **kwargs):
domain = get_object_or_None(Domain, id=domain_id)
if not domain:
return None
return func(domain_id, *args, **kwargs)
return wrapper
Run Code Online (Sandbox Code Playgroud)
这是一个包裹的功能:
@check_domain
def collect_data(domain_id, from_date, to_date):
do_stuff(...)
Run Code Online (Sandbox Code Playgroud)
如果我这样做,collect_data.__name__我会得到wrapper而不是collect_data
有任何想法吗?