Форум сайта python.su
0
Всем привет! По примеру пишу мой первый скриптик, но не могу дописать в виду возникающей ошибки
Посдкажите как исправить ошибку (ValueError: need more than 1 value to unpack) в данной ситуации?
#!/usr/local/bin/python
import os
df_info=os.popen(“df -k /usr |grep -E ^/dev | awk ‘{ print $1, $4 }’”)
format_df=df_info.read().split()
df_info.close()
allow_value=2000000 #2G of disk space
for cycle in format_df:
dev, free=cycle.split()
if int(free)< allow_value:
print ‘Disk space is lower then 2G’ #you can mail this
————————————————————–
# /root/python_scripts/test2.py
Traceback (most recent call last):
File “/root/python_scripts/test2.py”, line 10, in <module>
dev, free=cycle.split()
ValueError: need more than 1 value to unpack
Офлайн
0
Это значит, что cycle.split() возвращает только одно значение, а вы пытаетесь передать его в 2 переменных dev и free.
Исправить можно обернув в cycle.split() в try/except.
Отредактировано (Июнь 10, 2011 16:21:39)
Офлайн
32
вместо os.popen лучше использовать subprocess: пример
Офлайн
0
VaderПосмотрел разные примеры использования исключений и сделал своё, но почему то интепретатор ругается на except , не могу понять пчиму (
Это значит, что cycle.split() возвращает только одно значение, а вы пытаетесь передать его в 2 переменных dev и free.
Исправить можно обернув в cycle.split() в try/except.
Офлайн
0
ijjtry-except должны быть на одном уровне.for cycle in format_df:
try:
dev, free=cycle.split()
if int(free)< allow_value:
except ValueError:
print 'Disk space is lower then 2G' #you can mail this
Отредактировано (Июнь 15, 2011 13:05:47)
Офлайн
0
pillУ меня ведь except идет после if а там тоже отступ нужен вот и получилось видимо что не на одном уровне. Сделал на одном уровне отругался про отступijjtry-except должны быть на одном уровне.for cycle in format_df:
try:
dev, free=cycle.split()
if int(free)< allow_value:
except ValueError:
print 'Disk space is lower then 2G' #you can mail this
http://docs.python.org/tutorial/errors.html#handling-exceptions
PS:Но мне кажется проблема не здесь. Если что - покажете содержимое df_info, может что-т подскажется.
Отредактировано (Июнь 15, 2011 15:06:04)
Офлайн
0
Сорри - проморгал )
for cycle in format_df:
try:
dev, free=cycle.split()
if int(free)< allow_value:
print 'Disk space is lower then 2G' #you can mail this
except ValueError:
pass
...
dev, free = format_df
if int(free)< allow_value:
print 'Disk space is lower then 2G' #you can mail this
Отредактировано (Июнь 15, 2011 15:22:25)
Офлайн
0
pillИ то верно.. все работает. без цикла for . Спасибо большое за помощь!
Сорри - проморгал )…for cycle in format_df:
try:
dev, free=cycle.split()
if int(free)< allow_value:
print 'Disk space is lower then 2G' #you can mail this
except ValueError:
pass
Если format_df = , зачем вам цикл, и что вы пытаетесь сделать через split?...
dev, free = format_df
if int(free)< allow_value:
print 'Disk space is lower then 2G' #you can mail this
Отредактировано (Июнь 15, 2011 15:50:45)
Офлайн