<p>您还需要在方法的范围之外定义<code>camera</code>。<code>global</code>关键字的作用是告诉Python您将修改您在外部定义的变量。如果你没有,你会得到这个
错误。在</p>
<p><strong>编辑</strong></p>
<p>我没有注意到您已经对外声明了<code>camera</code>。但是,您可以删除<code>Camera()</code>方法中的变量,当您再次尝试修改该变量时,它的效果几乎相同。在</p>
<p><strong>编辑2</strong></p>
<p>现在我可以看到您的代码真正做什么以及您打算做什么,我认为您根本不应该使用全局<code>camera</code>,而是将其作为参数传递。这应该是有效的:</p>
<pre><code>camera_port = 0
ramp_frames = 400
def get_image(camera):
retval, im = camera.read()
return im
def Camera(camera):
for i in xrange(ramp_frames):
temp = get_image(camera)
print("Taking image...")
camera_capture = get_image(camera)
file = "opencv.png"
cv2.imwrite(file, camera_capture)
def Sendmail():
loop_value = 1
while loop_value==1:
try:
urllib2.urlopen("https://google.com")
except urllib2.URLError, e:
print "Network currently down."
sleep(20)
else:
print "Up and running."
loop_value = 0
def Email():
loop_value = 2
while loop_value==2:
try:
camera = cv2.VideoCapture(camera_port)
Camera(camera)
Sendmail()
yag = yagmail.SMTP('email', 'pass')
yag.send('amitaagarwal565@gmail.com', subject = "This is opencv.png", contents = 'opencv.png')
print "done"
except smtplib.SMTPAuthenticationError:
print 'Retrying in 30 seconds'
sleep(30)
else:
print 'Sent!'
sleep(20)
loop_value = 2
</code></pre>