Я новичок в программировании и Python - идеальный шторм ...UnboundLocalError: локальная переменная «вн» обращаться до присвоения
Несмотря на долго, это лишь фрагмент более 1300 строк оригинального кода. Что я добавляю это способность
- расщепленных имен файлов в root.ext
- определить расширение файла (вн)
- предел загрузки файлов с определенными расширениями файлов (extList)
- Throw/дисплей исключение, если расширение файла не extList
- позволяет загрузить файл, если файл находится в extList
- переименовать файл, используя оригинальное расширение файла
Код работал до тех пор, пока я не добавил логику расширения файла. Traceback из журнала apache - это последняя пара строк, но я не могу решить исключение UnboundLocalError: local variable 'ext' referenced before assignment
.
Линия 1024, ext not in extList
, которая вызывает остановку кода, находится над линиями трассировки.
Помощь? Что мне здесь не хватает?
def HandleProcessFormRequest(uploadWhat,
uploadPath,
formInfoHtml,
fieldStorage):
WritePrologueHtml(uploadWhat = uploadWhat)
uploadFileitem = fieldStorage["upload_file"]
if ((uploadFileitem == None) or
(not uploadFileitem.filename) or
(uploadFileitem.filename == "") or
(not uploadFileitem.file)):
WriteErrorAndFormAndEpilogueHtml(
html = "You must specify the upload file.",
uploadWhat = uploadWhat,
formInfoHtml = formInfoHtml,
fieldStorage = fieldStorage)
return
storeFilename = ""
if uploadWhat == "c130j":
tailNumber = GetValidFormSelectValue(
name = "tail-number",
options = C130JTailNumberOptions,
fieldStorage = fieldStorage)
if tailNumber == "":
WriteErrorAndFormAndEpilogueHtml(
html = "You must specify a valid tail number.",
uploadWhat = uploadWhat,
formInfoHtml = formInfoHtml,
fieldStorage = fieldStorage)
return
base = GetValidFormSelectValue(
name = "base",
options = C130JBaseOptions,
fieldStorage = fieldStorage)
if base == "":
WriteErrorAndFormAndEpilogueHtml(
html = "You must specify a valid base.",
uploadWhat = uploadWhat,
formInfoHtml = formInfoHtml,
fieldStorage = fieldStorage)
return
downloadDate = GetValidFormDateValue(
name = "download-date",
fieldStorage = fieldStorage,
defaultValue = None)
if (downloadDate is None) or (downloadDate == ""):
WriteErrorAndFormAndEpilogueHtml(
html = "You must specify a valid download date.",
uploadWhat = uploadWhat,
formInfoHtml = formInfoHtml,
fieldStorage = fieldStorage)
return
extList = [".fdr", ".fdt", ".dat"]
if ext not in extList:
WriteErrorAndFormAndEpilogueHtml(
html = "You may only upload fdr/fdt/dat files",
uploadWhat = uploadWhat,
formInfoHtml = formInfoHtml,
fieldStorage = fieldStorage)
root, ext = os.path.splitext(splitfilename)
if ext in extList:
ext = str(ext.lower())
return ext
Исключение:
Traceback (most recent call last):
File "/home/vhosts/isis-pmr/profile/upload/c130jupload.py", line 7, in <module>
formInfoHtml = None)
File "/home/vhosts/isis-pmr/profile/upload/uploadlib.py", line 1371, in HandleRequest
fieldStorage = fieldStorage)
File "/home/vhosts/isis-pmr/profile/upload/uploadlib.py", line 1024, in HandleProcessFormRequest
if ext not in extList:
UnboundLocalError: local variable 'ext' referenced before assignment
Ваша функция 'def ext (string): return ext' не имеет смысла, но может дать ключ к проблеме, которую вы испытываете (обратите внимание, однако, что она не связана с вашим фактическим сообщением об ошибке). Что вы ожидаете от этой функции? – chepner
Я вырезал весь код, который здесь не был проблемой, поэтому ваш пост намного легче читать. –