2017-02-03 1 views
-2

******************** 플라스크를 사용하여 게시판을 만들려고하는데 코드가 완벽하게 작동하기 전에 갑자기 일하는 것을 멈췄다.플라스크 UnboundLocalError : 할당 전에 참조 된 로컬 변수 'shift1'

from flask import Flask, render_template 
import datetime 
import MySQLdb 

app = Flask(__name__) 

@app.route('/shutdown', methods=['POST']) 
def shutdown(): 
    shutdown_server() 
    return 'Server shutting down...' 




@app.route('/') 
def index(): 

    now = datetime.datetime.now() 
    timestamp = datetime.datetime.now().time() 

    if datetime.time(7, 30) <= timestamp <= datetime.time(15, 29): 
    shift1 = "A" 
    elif datetime.time(15, 30) <= timestamp <= datetime.time(23, 29): 
    shift1 = "B" 
    elif datetime.time(23, 30) <= timestamp <= datetime.time(7, 29): 
    shift1 = "C" 
    return render_template('hello.html', month=now.month, date=now.day, year=now.year, hour=now.hour, minute=now.minute, second=now.second, shift=shift1) 

if __name__ == '__main__': 
    app.run(host= '0.0.0.0', debug=True) 

HTML 코드 :

<html> 
<head> 
<script> 
setInterval(function() { 
        window.location.reload(); 
       }, 1000); 

</script> 

<style> 
table, td, tr { 
    text-align: center; 
    height: 72px; 
    font-size: 53; 
} 


</style> 
</head> 

<body> 

<table border="1" width="100%" height="941px"> 
<tr> 
<td colspan="4"><p align="centre"><font color="blue">{{ date }}/{{ month }}/{{ year }}</font></p></td> 
<td colspan="4"><p align="centre"><font color="blue">{{ hour }} : {{ minute }} : {{ second }}</font></p></td> 
</tr> 
<tr> 
<td colspan="5"></td> 
<td colspan="2" ><font>Shift:</td> 
<td colspan="1" ><font color="red">{{ shift }}</td> 
</tr> 

<tr> 
<td colspan="2" width="20%"><font size="28" color="green">Plan</td> 
<td width="10%">1</td> 
<td></td> 
<td rowspan="8" colspan="4"></td> 
</tr> 
<tr> 
<td colspan="2" rowspan="3"></td> 
<td width="10%">2</td> 
<td></td> 
</tr> 
<tr> 
<td width="10%">3</td> 
<td></td> 

</tr> 

<tr> 
<td width="10%">4</td> 
<td></td> 

</tr> 
<tr> 
<td colspan="2"height="50px" width="20%"><font size="28" color="green">Actual</td> 
<td width="10%">5</td> 
<td></td> 

</tr> 
<td colspan="2" rowspan="3"></td> 
<td width="10%">6</td> 
<td></td> 
</tr> 
<tr> 
<td width="10%">7</td> 
<td></td> 

</tr> 

<tr> 
<td width="10%">8</td> 
<td></td> 

</tr> 
</table> 
</body> 
</html> 
플라스크에 많은 경험이없는 도와 준거하시기 바랍니다, 나는 또한 변수 글로벌


파이썬 (플라스크) 코드를 선언하려고했습니다

오류 :

click here to see the screenshot

,536,913,632 10
+0

질문에있는 모든 오류를 코드 블록 –

답변

1

시간 비교에 결함이 있습니다. 당신은 time() 객체의 초 구성 요소를 무시됩니다

>>> import datetime 
>>> datetime.time(15, 29, 30) <= datetime.time(15, 29) 
False 
>>> datetime.time(15, 29, 30) >= datetime.time(15, 30) 
False 

초를 구성 요소 기본값을 0에, 그래서 15:29:30나중에 15:29:00보다입니다. 즉, if .. elif 개의 분기가 일치하지 않는 시간 소인이 있으며, shift1이 설정되지 않습니다. 내가 이분을 사용하는 것, 변화의 큰 숫자를 들어

if datetime.time(7, 30) < timestamp < datetime.time(15, 30): 
    shift1 = "A" 
elif datetime.time(15, 30) < timestamp < datetime.time(23, 30): 
    shift1 = "B" 
elif datetime.time(23, 30) < timestamp < datetime.time(7, 30): 
    shift1 = "C" 

;

사용 < 시험 대신, 더 나은 상위 경계를 사용 시퀀스의 시작 시간을 설정 한 다음 현재 시간에 대한 결과 삽입 포인터를 시프트 시퀀스의 인덱스로 사용하십시오.

from bisect import bisect 

shift_starts = (datetime.time(7, 30), datetime.time(15, 30), datetime.time(23, 30)) 
shift_names = 'CABC' # C twice to account for the time before 7:30 
shift_index = bisect(shift_starts, timestamp) 
shift1 = shift_names[shift_index] 
관련 문제