2
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Vì vậy, tôi có một đoạn mã đang cung cấp cho tôi một chút đau đầu.
def Handy[]:
print "\nMöchten Sie ein neues Handy?"
print "\n1 - Ja\n2 - Nein"
handy = raw_input[">>> "]
if handy == "2":
print "\nSie möchten kein neues Handy"
elif handy == "1":
wunschhandy = raw_input["\nBitte geben Sie den Namen des Handys ein: "]
else:
Handy[]
return handy, wunschhandy
Nếu tôi chọn Tùy chọn "1"
, mọi thứ đều ổn. Nhưng nếu tôi đi "2"
, nó sẽ cho tôi lỗi này: "UnboundLocalError: local variable 'wunschhandy' referenced before assignment"
Tôi biết tại sao nó lại xảy ra, hoặc ít nhất tôi nghĩ rằng tôi biết tại sao. Đó là bởi vì var wunschhandy
chưa được từ chối, vì tôi đã sử dụng tùy chọn "2"
.
Vậy làm cách nào để giải quyết vấn đề này? Có cách nào để chỉ trả về một giá trị, nếu nó được chỉ định bởi quyền nếu lựa chọn?
Đã hỏi ngày 26 tháng 3 năm 2013 lúc 17:20Mar 26, 2013 at 17:20
3
Trong trường hợp của bạn, tôi sẽ đặt wunschhandy = None
trước câu lệnh
if handy == "2":
print "\nSie möchten kein neues Handy"
return handy,
elif handy == "1":
wunschhandy = raw_input["\nBitte geben Sie den Namen des Handys ein: "]
return handy, wunschhandy
else:
Handy[]
0.Trong trường hợp này, bạn có một giá trị được xác định và người gọi có thể kiểm tra cho nó.
Một lựa chọn khác sẽ là
if handy == "2":
print "\nSie möchten kein neues Handy"
return handy,
elif handy == "1":
wunschhandy = raw_input["\nBitte geben Sie den Namen des Handys ein: "]
return handy, wunschhandy
else:
Handy[]
trong đó trả về một tuple có độ dài 2 cho tùy chọn 1 và một tuple có độ dài 1 cho tùy chọn 2. Người gọi có thể dễ dàng kiểm tra điều đó.
Bên cạnh đó, thay vì gọi
if handy == "2":
print "\nSie möchten kein neues Handy"
return handy,
elif handy == "1":
wunschhandy = raw_input["\nBitte geben Sie den Namen des Handys ein: "]
return handy, wunschhandy
else:
Handy[]
1 đệ quy, tôi sẽ đặt một vòng lặp bên trong nó. Nếu không, bạn có thể kết thúc trong một lỗi tràn chồng ...Đã trả lời ngày 26 tháng 3 năm 2013 lúc 17:23Mar 26, 2013 at 17:23
GLGLGLGLGLglglgl
86.8K12 Huy hiệu vàng146 Huy hiệu bạc214 Huy hiệu đồng12 gold badges146 silver badges214 bronze badges
Nếu bạn muốn trả về wunschhandy
chỉ khi người dùng chọn "1", thì hãy đặt các câu lệnh trả về trong các khối IF
def Handy[]:
print "\nMöchten Sie ein neues Handy?"
print "\n1 - Ja\n2 - Nein"
handy = raw_input[">>> "]
if handy == "2":
print "\nSie möchten kein neues Handy"
return handy
elif handy == "1":
wunschhandy = raw_input["\nBitte geben Sie den Namen des Handys ein: "]
return handy, wunschhandy
else:
Handy[]
//do you want to return Handy[]?
Đã trả lời ngày 26 tháng 3 năm 2013 lúc 17:22Mar 26, 2013 at 17:22
Jonhopkinsjonhopkinsjonhopkins
3,8063 huy hiệu vàng26 Huy hiệu bạc39 Huy hiệu đồng3 gold badges26 silver badges39 bronze badges
Chỉ dựa trên đoạn mã nhỏ mà bạn cung cấp, có vẻ như biến 'wunschhandy' chỉ được xác định nếu 'tiện dụng == "1"', nhưng biến này đang được trả về vào cuối. Tôi sẽ đặt wunschhandy bằng null trên câu lệnh IF để biến được xác định trước khi cố gắng trả về nó ở cuối.
Đã trả lời ngày 26 tháng 3 năm 2013 lúc 17:22Mar 26, 2013 at 17:22
JonhopkinsjonhopkinsSeth
3,8063 huy hiệu vàng26 Huy hiệu bạc39 Huy hiệu đồng1 gold badge8 silver badges17 bronze badges
Chỉ dựa trên đoạn mã nhỏ mà bạn cung cấp, có vẻ như biến 'wunschhandy' chỉ được xác định nếu 'tiện dụng == "1"', nhưng biến này đang được trả về vào cuối. Tôi sẽ đặt wunschhandy bằng null trên câu lệnh IF để biến được xác định trước khi cố gắng trả về nó ở cuối.
Đã trả lời ngày 26 tháng 3 năm 2013 lúc 17:22Mar 26, 2013 at 17:22
Jonhopkinsjonhopkinsaweis
3,8063 huy hiệu vàng26 Huy hiệu bạc39 Huy hiệu đồng3 gold badges29 silver badges41 bronze badges
Chỉ dựa trên đoạn mã nhỏ mà bạn cung cấp, có vẻ như biến 'wunschhandy' chỉ được xác định nếu 'tiện dụng == "1"', nhưng biến này đang được trả về vào cuối. Tôi sẽ đặt wunschhandy bằng null trên câu lệnh IF để biến được xác định trước khi cố gắng trả về nó ở cuối.
def Handy[]:
handy = raw_input["Moechten Sie ein neues Handy?\n1 - Ja\n2 - Nein\n>>> "]
wunschhandy = None
if handy is "2" :
print "\nSie moechten kein neues Handy"
elif handy is "1" :
wunschhandy = raw_input["\nBitte geben sie den Namen des Handys ein: "]
else :
Handy[]
return handy, wunschhandy
SethsethMar 26, 2013 at 17:26
1.3531 Huy hiệu vàng8 Huy hiệu bạc17 Huy hiệu đồngtamasgal
Đó là bởi vì biến wunschhandy
được trả về trước khi được khai báo. Chỉ khi bạn nhập 1, nó được khai báo. Bạn có thể khai báo wunschhandy
trước các câu lệnh IF và gán cho nó một giá trị thiếu hụt.18 gold badges93
silver badges133 bronze badges