我用Scrapy编写了一个爬虫。
我正在将数据写入数据库的管道中有一个函数。我使用日志记录模块记录运行时日志。
我发现当我的字符串有中文时logging.error()会抛出异常。但是搜寻器一直在运行!
我知道这是一个小错误,但是如果存在严重的异常,并且搜寻器继续运行,我会错过它。
我的问题是:是否存在可以Scrapy在出现异常时强制停止的设置?
当用户在输入中键入特定关键字(例如“关闭”)而不必在每个输入中添加必要的代码时,如何结束函数?基本上,当用户在以下任何输入中的任何位置键入“关闭”一词时,我希望该功能完全停止。我创建了一个函数(见代码底部)并尝试在我的代码中放置/调用它,但不确定将它放在哪里,或者我是否可以用一个函数来做到这一点?如果没有,我怎样才能做到这一点?
def order_coffee():
drink = input("What would you like? (espresso/latte/cappuccino): ")
user_owes = int(0)
if drink == "espresso":
user_owes = round(1.5, 2)
elif drink == "latte":
user_owes = round(2.5, 2)
elif drink == "cappuccino":
user_owes = round(3.0, 2)
print(f"Please insert coins, you owe ${user_owes}.")
quarters = (int(input("How many quarters?: ")) * .25)
dimes = (int(input("How many dimes?: ")) * .1)
nickels = (int(input("How many nickels?: ")) * .05)
pennies = (int(input("How many pennies?: ")) * .01)
user_paid = …Run Code Online (Sandbox Code Playgroud) 在我正在制作的python程序中,我希望它只采用整数,如果它得到一个字符串,则说"系统中存在错误".用户不会理解,而不是篡改敏感的信息
我对此进行了相当多的搜索,但找不到任何令人满意的结果。
我一直在尝试编写一个 python 程序来监听电子邮件退回报告,并根据退回的原因以不同的时间间隔重新发送它们。
import smtplib
from smtplib import *
sender = 'foo@bar.com'
receivers = ['42@life.com']
message = """From: From Arthur <foo@bar.com>
To: To Deep Thought <42@life.com>
Subject: SMTP e-mail test
This is a test e-mail message.
"""
try:
smtpObj = smtplib.SMTP('smtp.gmail.com',587)
smtpObj.starttls()
smtpObj.login(sender,'foo@bar.com')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPResponseException:
error_code = SMTPResponseException.smtp_code
error_message = SMTPResponseException.smtp_error
print "Error code:"+error_code
print "Message:"+error_message
if (error_code==422):
print "Recipient Mailbox Full"
elif(error_code==431):
print "Server out of space"
elif(error_code==447):
print "Timeout. Try …Run Code Online (Sandbox Code Playgroud) 我想处理特定的OSError代码,如下所示:
try:
os.scandir()
except OSPermissionError as error:
# Only catch errno.EACCES, errno.EPERM
handle_permission_error()
except OSFileNotFoundError as error:
# Only catch errno.ENOENT
handle_FileNotFoundError_error()
Run Code Online (Sandbox Code Playgroud)
这可以在python中完成吗?
我想执行一个事务来删除一些值,然后在数据库中计数,如果结果<1,则回滚,我尝试了以下代码:
@login_required
@csrf_exempt
@transaction.atomic
def update_user_groups(request):
if request.POST:
userId = request.POST['userId']
groups = request.POST.getlist('groups[]')
result = None
with transaction.atomic():
try:
GroupsUsers.objects.filter(user_id=int(userId)).delete()
for group in groups:
group_user = GroupsUsers()
group_user.user_id = userId
group_user.group_id = group
group_user.save()
count = UsersInAdmin.objects.all().count()
if count < 1:
transaction.commit()
else:
transaction.rollback()
except Exception, e:
result = e
return JsonResponse(result, safe=False)
Run Code Online (Sandbox Code Playgroud)
谢谢,
实际上,我已经知道我想做的事情有点奇怪,但是我认为它适合我的代码,所以我问:
有没有办法做这样的事情:
foo = { 'a':1, 'b':2, 'c':3 }
bar = { 'd':4, 'f':5, 'g':6 }
foo.get('h', bar.get('h'))
Run Code Online (Sandbox Code Playgroud)
引发异常而不是None,以防dict.get()失败?
foo.get('h', bar.get('h', raise)) 将提高 SyntaxError
foo.get('h', bar.get('h', Exception)) 只会回来 Exception
现在,我只是在和我一起工作,if not foo.get('h', bar.get('h')): raise Exception但是如果有直接提高筹码的方法,dict.get()我将非常高兴。
谢谢
我只是想知道,在使用try时除外,使用Base类"Except"和使用特定异常(如"ImportError"或"IOError"或任何其他特定异常)之间的区别是什么.一个和另一个之间是否存在利弊?
python ×6
exception ×2
python-2.7 ×2
dictionary ×1
django ×1
error-code ×1
input ×1
output ×1
python-3.x ×1
scrapy ×1
smtp ×1
smtplib ×1
user-defined ×1
web-scraping ×1