2014-01-20 65 views
1

你好,我今天正在研究一個新的python腳本,我遇到了這個錯誤。林有點困惑,再加上是腳本新手我不知道如何定義此代碼。任何幫助將是美好的。謝謝Raspberry Pi Python字符串沒有定義

錯誤

File "newipemail.py", line 25, in <module> 

    text = 'The IP address is: %s' % inet_string 

NameError: name 'inet_string' is not defined 

腳本

#!/usr/bin/python 

import subprocess 
import smtplib 
import string 
import time 

FIXED_IP = '10.10.2.10' 

ipaddr_string = 'ip -4 addr > ~/current_ip.txt' 
subprocess.call(ipaddr_string, shell=True) 

ip_file = file('current_ip.txt', 'r') 
for line in ip_file: 
     if 'eth0:' in line: 
      inet_line = ip_file.next() 
      _time = time.asctime() 
      inet_string = inet_line[9:(inet_line.index('/'))] 
      if inet_string != FIXED_IP: 
       print 'Found eth0: %s' % inet_string 

SUBJECT = 'IP Address from Raspberry Pi at: %s' % time.asctime() 
TO = '[email protected]' 
FROM = '[email protected]' 
text = 'The IP address is: %s' % inet_string 
BODY = string.join((
    'From: %s' % FROM, 
    'To: %s' % TO, 
    'Subject: %s' % SUBJECT,'',text), '\r\n') 

server = smtplib.SMTP_SSL('smtp.gmail.com', 465) 
server.login('email.server.com', 'password') 
server.sendmail(FROM, [TO], BODY) 
server.quit() 

ip_file.close() 
+1

你確定你的文件current_ip.txt中有「eth0:」嗎? – Ernst

+0

只有在文件中找到* eth0:*時,纔會定義變量'inet_string'。該錯誤表明該變量未定義,這意味着文件可能在'inet_line = ip_file.next()'行後面不包含* eth0:* – bvidal

+1

,請檢查inet_line的值是否與print(inet_line) '。這會給你線索,爲什麼'inet_string'沒有定義 – joaquin

回答

2

問題是,目前linecurrent_ip.txt,字符串eth0:找不到。因此,您的if語句返回False

if 'eth0:' in line: 
    inet_line = ip_file.next() 
    _time = time.asctime() 
    inet_string = inet_line[9:(inet_line.index('/'))] 

如果line發現eth0:inet_line被定義,否則將不能被定義和Python跳轉到下一個碼塊,其是其中異常。

text = 'The IP address is: %s' % inet_string 
0

當我走進我不小心放置的eth0爲eth1我改回爲eth0文件和它的工作很大。

+0

好吧,我投票結束這個問題,因爲你已經發現問題,並且是由於編碼錯誤 – joaquin